Đúng (nhưng lưu ý rằng IN
là một toán tử, không phải là một mệnh đề và nó hoạt động như thế này trong SQL nói chung, không chỉ cho Oracle).
where 1 not in (null,1)
tương đương với:
where 1 != null and 1 != 1
mà thực sự nên được viết là:
WHERE 1 NOT IN (NULL, 1)
và
WHERE 1 <> NULL AND 1 <> 1
giống như:
WHERE (1 <> NULL) AND (1 <> 1)
đánh giá là:
WHERE UNKNOWN AND FALSE
và xa hơn như:
WHERE FALSE
Vì vậy, nó chính xác không trả về hàng nào.
Lưu ý rằng nếu bạn có WHERE 1 NOT IN (NULL, 2)
, nó sẽ đánh giá thành WHERE UNKNOWN
(để lại như một bài tập) và cũng không có hàng nào được trả lại.