Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Valeurs NULL dans la clause NOT IN

La requête A est identique à :

select 'true' where 3 = 1 or 3 = 2 or 3 = 3 or 3 = null

Puisque 3 = 3 est vrai, vous obtenez un résultat.

La requête B est identique à :

select 'true' where 3 <> 1 and 3 <> 2 and 3 <> null

Lorsque ansi_nulls est activé, 3 <> null est UNKNOWN, donc le prédicat prend la valeur UNKNOWN et vous n'obtenez aucune ligne.

Lorsque ansi_nulls est désactivé, 3 <> null est vrai, donc le prédicat est évalué à vrai et vous obtenez une ligne.