Oracle
 sql >> Database >  >> RDS >> Oracle

Come funziona la clausola 'in' in Oracle

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.