J'avais une requête (pour Postgres et Informix) avec une NOT INclause contenant une sous-requête qui, dans certains cas, renvoyait des NULLvaleurs, ce qui faisait que cette clause (et la requête entière) ne retournait rien.
Quelle est la meilleure façon de comprendre cela? Je pensais NULLà quelque chose sans valeur, et je ne m'attendais donc pas à ce que la requête échoue, mais ce n'est évidemment pas la bonne façon de penser NULL.
x <> NULLcomme résolvant àFALSE, vous vous attendezNOT (x <> NULL)à évaluerTRUEet ce n'est pas le cas. Les deux évaluentUNKNOWN. L'astuce est qu'une ligne n'est sélectionnée que si laWHEREclause (si présente) est évaluée àTRUE- une ligne est omise si la clause est évaluée àFALSEouUNKNOWN. Ce comportement (en général, et pour leNOT INprédicat en particulier) est rendu obligatoire par la norme SQL.