Correcto (pero tenga en cuenta que IN
es un operador, no una cláusula y funciona así en SQL en general, no solo para Oracle).
where 1 not in (null,1)
es equivalente a:
where 1 != null and 1 != 1
que en realidad debería escribirse como:
WHERE 1 NOT IN (NULL, 1)
y
WHERE 1 <> NULL AND 1 <> 1
que es lo mismo que:
WHERE (1 <> NULL) AND (1 <> 1)
que se evalúa como:
WHERE UNKNOWN AND FALSE
y además como:
WHERE FALSE
Por lo tanto, correctamente no devuelve filas.
Tenga en cuenta que si tuviera WHERE 1 NOT IN (NULL, 2)
, se evaluaría como WHERE UNKNOWN
(se dejó como ejercicio) y tampoco se devolverían filas.