Ho avuto una query (per Postgres e Informix) con una NOT IN
clausola contenente una sottoquery che in alcuni casi restituiva NULL
valori, facendo sì che quella clausola (e l'intera query) non restituissero nulla.
Qual è il modo migliore per capirlo? Ho pensato NULL
a qualcosa senza valore e quindi non mi aspettavo che la query fallisse, ma ovviamente non è questo il modo corretto di pensare NULL
.
x <> NULL
che si stia risolvendoFALSE
, ti aspetterestiNOT (x <> NULL)
di valutarloTRUE
e non lo fa. Entrambi valutanoUNKNOWN
. Il trucco è che una riga viene selezionata solo se laWHERE
clausola (se presente) restituisceTRUE
- una riga viene omessa se la clausola restituisceFALSE
oUNKNOWN
. Questo comportamento (in generale e per ilNOT IN
predicato in particolare) è obbligatorio per lo standard SQL.