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) ?

Pourquoi « NULL = NULL » renvoie-t-il False dans SQL Server (et comment « ansi_nulls » l'affecte-t-il) ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-20 23:09:09493parcourir

Why `NULL = NULL` is False in SQL Server (and the `ansi_nulls` Setting)

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!

Déclaration:
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