Správně (ale nezapomeňte, že IN
je operátor, nikoli klauzule a takto to funguje v SQL obecně, nejen pro Oracle).
where 1 not in (null,1)
je ekvivalentní:
where 1 != null and 1 != 1
který by měl být skutečně zapsán jako:
WHERE 1 NOT IN (NULL, 1)
a
WHERE 1 <> NULL AND 1 <> 1
což je stejné jako:
WHERE (1 <> NULL) AND (1 <> 1)
což se vyhodnotí jako:
WHERE UNKNOWN AND FALSE
a dále jako:
WHERE FALSE
Správně tedy nevrací žádné řádky.
Všimněte si, že pokud jste měli WHERE 1 NOT IN (NULL, 2)
, bude to vyhodnoceno jako WHERE UNKNOWN
(zanecháno jako cvičení) a nebudou vráceny žádné řádky.