Maison >base de données >tutoriel mysql >Pourquoi « NULL = NULL » renvoie-t-il False dans SQL Server (et comment « ansi_nulls » l'affecte-t-il) ?
Comprendre pourquoi NULL = NULL
renvoie False dans SQL Server
La gestion par SQL Server des valeurs NULL
conduit souvent à des résultats inattendus. L'opérateur =
, lors de la comparaison de colonnes nullables, renvoie <code>false</code> car NULL
signifie une valeur inconnue ou manquante.
Une condition de clause WHERE
comme nullParam = NULL
est toujours évaluée à <code>false</code>. En effet, il est impossible de confirmer définitivement l'égalité entre deux quantités inconnues.
La norme SQL-92 dicte ce comportement : NULL = NULL
n'est ni vrai ni faux ; ce n'est pas défini.
L'impact du ansi_nulls
Cadre
Le comportement change radicalement en fonction du paramètre ansi_nulls
. Avec ansi_nulls
défini sur OFF
, NULL = NULL
est étonnamment évalué à <code>true</code>. Ceci est démontré ci-dessous :
Exemple de code :
<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>
Sortie :
Avec ansi_nulls OFF
:
<code>true</code>
Avec ansi_nulls ON
:
<code>false</code>
Meilleures pratiques pour gérer les valeurs NULL
En raison de cette variabilité, il est crucial d'être conscient du paramètre ansi_nulls
lorsque vous travaillez avec des comparaisons NULL
. Pour éviter toute ambiguïté, utilisez toujours IS NULL
et IS NOT NULL
lorsque vous vérifiez les valeurs NULL
. Cela garantit un comportement cohérent et prévisible quel que soit le paramètre ansi_nulls
. Il s'agit de l'approche recommandée pour un code SQL fiable.
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!