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