Họ là ngữ nghĩa giống hệt nhau.
IN
chỉ là viết tắt của một chuỗi các câu bình đẳng như trong ví dụ thứ hai của bạn. Hiệu suất cũng phải giống nhau.
Loại không quan trọng, nó sẽ luôn luôn đánh giá theo một chuỗi các điểm cân bằng.
Có một sự khác biệt khi bạn đang sử dụng NOT IN
và dữ liệu có thể được NULL
, mặc dù - một NULL
sẽ không đánh giá sai để so sánh NOT IN
, vì vậy bạn có thể nhận được hàng bạn không mong đợi trong tập kết quả.
Như một ví dụ:
SELECT 'Passed!' WHERE NULL NOT IN ('foo', 'bar')
Các truy vấn trên sẽ không trở lại liên tiếp mặc dù theo mệnh giá NULL
không phải là 'foo'
hoặc 'bar'
- điều này là bởi vì NULL
là tình trạng không rõ, và SQL không thể nói chắc chắn rằng giá trị không xác định là KHÔNG một trong các giá trị được liệt kê IN
.
Nó cũng sẽ là tốt để biết những gì thực hiện SQL chúng tôi đang nói về ở đây. – JNK