Bạn đã thử chạy truy vấn ban đầu với TOP 1 chưa? rất có thể nó sẽ chậm như vậy.
Đôi khi khi trình tối ưu hóa nghĩ rằng một cái gì đó rất có thể xảy ra và sẽ trả về một tập hợp dữ liệu khổng lồ mà không tốn nhiều công sức (tức là gần như tất cả các bản ghi sẽ được trả về), nó chọn phần lớn là các phép nối vòng lặp vì nó chỉ cần lấy cái đầu tiên và một tham gia vòng lặp là tốt cho chỉ nhận được một vài bản ghi. Khi điều đó không thành sự thật, bạn sẽ phải mất cả ngày và mãi mới có kết quả.
Trong trường hợp của bạn, có vẻ như nó rất hiếm, vì vậy sự lựa chọn này gây tổn hại nặng nề. Thay vào đó, hãy thử làm điều gì đó như SELECT @count = COUNT(*) FROM ...
và sau đó kiểm tra xem số đó có khác không.