Maison > base de données > tutoriel mysql > Pourquoi les valeurs NULL provoquent-elles des résultats inattendus avec la clause NOT IN de SQL ?

Pourquoi les valeurs NULL provoquent-elles des résultats inattendus avec la clause NOT IN de SQL ?

Mary-Kate Olsen
Libérer: 2025-01-23 12:31:09
original
879 Les gens l'ont consulté

Why Do NULL Values Cause Unexpected Results with SQL's NOT IN Clause?

Comprendre le comportement inattendu des valeurs NULL et la clause NOT IN en SQL

Les requêtes SQL produisent souvent des résultats surprenants lorsque les valeurs NULL interagissent avec l'opérateur NOT IN. Cet écart devient évident lorsque l'on compare une requête NOT IN à une requête équivalente utilisant un LEFT JOIN.

Considérez ces requêtes :

A: select 'true' where 3 in (1, 2, 3, null)
B: select 'true' where 3 not in (1, 2, null)
Copier après la connexion

La requête A renvoie un résultat, contrairement à la requête B. La cause première réside dans la manière dont les différentes bases de données SQL gèrent les NULL valeurs.

Avec ANSI_NULLS activé (valeur par défaut dans de nombreux systèmes comme SQL Server 2005), toute comparaison impliquant NULL, telle que 3 = NULL, est évaluée à UNKNOWN. Cette indétermination découle de l'incertitude inhérente à NULL.

Dans la requête B, l'opérateur NOT IN rencontre NULL dans la sous-requête, ce qui entraîne une évaluation UNKNOWN. Puisqu'aucune autre valeur ne correspond, le prédicat entier devient UNKNOWN, donnant un ensemble de résultats vide.

À l'inverse, la désactivation ANSI_NULLS modifie le comportement. Avec ANSI_NULLS désactivé, 3 = NULL est évalué à TRUE. SQL interprète NULL comme potentiellement égal à tout, y compris lui-même. Par conséquent, le prédicat de la requête B est évalué à TRUE, renvoyant un résultat.

En bref, les résultats incohérents proviennent du traitement variable des valeurs NULL déterminées par le paramètre ANSI_NULLS. Lorsque ANSI_NULLS est activé, les comparaisons avec NULL produisent UNKNOWN, conduisant à des résultats inattendus dans les requêtes utilisant les valeurs NOT IN et NULL. Cela souligne l'importance de comprendre la NULL gestion en SQL pour des résultats de requête précis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal