ホームページ >データベース >mysql チュートリアル >SQL Server で「NULL = NULL」が False を返すのはなぜですか (および「ansi_nulls」はそれにどのような影響を与えますか)?

SQL Server で「NULL = NULL」が False を返すのはなぜですか (および「ansi_nulls」はそれにどのような影響を与えますか)?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-20 23:09:09493ブラウズ

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

SQL Server で NULL = NULL が False を返す理由を理解する

SQL Server による NULL 値の処理により、予期しない結果が生じることがよくあります。 = 演算子は、null 許容列を比較する場合、<code>false</code> を返します。これは、NULL が不明な値または欠損値を示すためです。

WHERE のような nullParam = NULL 句条件は、常に <code>false</code> と評価されます。これは、2 つの未知の量が等しいことを明確に確認することは不可能だからです。

SQL-92 標準では、この動作が規定されています。NULL = NULL は true でも false でもありません。それは未定義です。

ansi_nulls 設定の影響

ansi_nullsの設定によって挙動が大きく変わります。 ansi_nullsOFF に設定すると、NULL = NULL は驚くべきことに <code>true</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>

出力:

ansi_nulls OFF の場合:

<code>true</code>

ansi_nulls ON の場合:

<code>false</code>

NULL を処理するためのベスト プラクティス

この変動性のため、ansi_nulls 比較を使用する場合は、NULL 設定に注意することが重要です。 曖昧さを避けるため、IS NULL 値をチェックするときは常に IS NOT NULLNULL を使用してください。 これにより、ansi_nulls 設定に関係なく、一貫性のある予測可能な動作が保証されます。 これは、信頼性の高い SQL コードに対して推奨されるアプローチです。

以上がSQL Server で「NULL = NULL」が False を返すのはなぜですか (および「ansi_nulls」はそれにどのような影響を与えますか)?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。