Nói chung, IN
và JOIN
là các truy vấn khác nhau có thể mang lại các kết quả khác nhau.
SELECT a.*
FROM a
JOIN b
ON a.col = b.col
không giống như
SELECT a.*
FROM a
WHERE col IN
(
SELECT col
FROM b
)
, trừ khi b.col
là duy nhất.
Tuy nhiên, đây là từ đồng nghĩa với truy vấn đầu tiên:
SELECT a.*
FROM a
JOIN (
SELECT DISTINCT col
FROM b
)
ON b.col = a.col
Nếu cột tham gia là UNIQUE
và được đánh dấu như vậy, cả hai truy vấn này đều mang lại cùng một kế hoạch trong SQL Server
.
Nếu không, thì IN
nhanh hơn JOIN
trên DISTINCT
.
Xem bài viết này trong blog của tôi để biết chi tiết về hiệu suất:
-
IN
so vớiJOIN
so vớiEXISTS