Comparaison NULL unique de SQL Server : pourquoi NULL = NULL est souvent faux
SQL Server gère les valeurs NULL différemment de nombreux autres langages de programmation. Une source courante de confusion est le fait que NULL = NULL
est généralement évalué à FALSE
. Ce n'est pas un bug ; c'est un choix de conception délibéré ancré dans la définition de NULL elle-même.
Dans SQL Server, NULL représente une valeur inconnue ou manquante. Par conséquent, comparer deux valeurs NULL revient à comparer deux inconnues : il est impossible de dire avec certitude si elles sont égales car leurs valeurs ne sont pas définies. Le résultat de NULL = NULL
est souvent FALSE
(ou parfois NULL
, selon le contexte et les paramètres du système).
Ce comportement découle de la norme ANSI SQL-92. Cependant, il est crucial de comprendre l'impact du paramètre ansi_nulls
dans SQL Server.
Le rôle de ansi_nulls
Le paramètre ansi_nulls
détermine la manière dont SQL Server interprète les comparaisons NULL.
ansi_nulls ON
(Par défaut) : Sous ce paramètre (par défaut), NULL = NULL
est évalué à FALSE
, conformément à la norme ANSI SQL-92.
ansi_nulls OFF
: Avec ce paramètre, NULL = NULL
est évalué à TRUE
. Ce comportement reflète la façon dont NULL est traité dans de nombreux autres langages de programmation, où il est souvent considéré comme une valeur spéciale représentant un état indéfini.
Exemple illustratif :
L'extrait de code suivant montre la différence :
<code class="language-sql">SET ANSI_NULLS OFF; IF NULL = NULL PRINT 'TRUE'; ELSE PRINT 'FALSE'; SET ANSI_NULLS ON; IF NULL = NULL PRINT 'TRUE'; ELSE PRINT 'FALSE';</code>
Avec ansi_nulls OFF
, les deux déclarations IF
afficheront « VRAI ». Avec ansi_nulls ON
, la première déclaration IF
imprimera "FALSE", tandis que la seconde imprimera également "FALSE"
Comprendre le paramètre ansi_nulls
et l'ambiguïté inhérente aux comparaisons NULL est essentiel pour écrire du code SQL Server robuste et sans erreur. Soyez toujours attentif à la façon dont les valeurs NULL sont traitées dans vos requêtes pour éviter des résultats inattendus.
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!