Benar (tetapi perhatikan bahwa IN
adalah operator, bukan klausa dan berfungsi seperti ini di SQL secara umum, tidak hanya untuk Oracle).
where 1 not in (null,1)
setara dengan:
where 1 != null and 1 != 1
yang seharusnya ditulis sebagai:
WHERE 1 NOT IN (NULL, 1)
dan
WHERE 1 <> NULL AND 1 <> 1
yang sama dengan:
WHERE (1 <> NULL) AND (1 <> 1)
yang mengevaluasi ke:
WHERE UNKNOWN AND FALSE
dan selanjutnya sebagai:
WHERE FALSE
Jadi, ini tidak mengembalikan baris dengan benar.
Perhatikan bahwa jika Anda memiliki WHERE 1 NOT IN (NULL, 2)
, itu akan mengevaluasi ke WHERE UNKNOWN
(ditinggalkan sebagai latihan) dan tidak ada baris yang akan dikembalikan juga.