Corretto (ma nota che IN
è un operatore, non una clausola e funziona così in SQL in generale, non solo per Oracle).
where 1 not in (null,1)
equivale a:
where 1 != null and 1 != 1
che in realtà dovrebbe essere scritto come:
WHERE 1 NOT IN (NULL, 1)
e
WHERE 1 <> NULL AND 1 <> 1
che è uguale a:
WHERE (1 <> NULL) AND (1 <> 1)
che restituisce:
WHERE UNKNOWN AND FALSE
e inoltre come:
WHERE FALSE
Quindi, non restituisce correttamente nessuna riga.
Nota che se avessi WHERE 1 NOT IN (NULL, 2)
, restituirebbe WHERE UNKNOWN
(lasciato come esercizio) e nessuna riga verrebbe restituita.