ホームページ >データベース >mysql チュートリアル >SQL Server で NULL = NULL が False と評価されるのはなぜですか?
SQL Server の一意の NULL 比較: NULL = NULL が偽となることが多い理由
SQL Server は、他の多くのプログラミング言語とは異なる NULL 値を処理します。 一般的な混乱の原因は、NULL = NULL
が通常 FALSE
と評価されるという事実です。これはバグではありません。これは、NULL 自体の定義に根ざした意図的な設計の選択です。
SQL Server では、NULL は不明な値または欠損値を表します。 したがって、2 つの NULL を比較することは、2 つの未知のものを比較することに似ており、値が定義されていないため、それらが等しいかどうかを明確に言うことは不可能です。 NULL = NULL
の結果は、多くの場合 FALSE
(コンテキストやシステム設定によっては NULL
になる場合もあります)。
この動作は、ANSI SQL-92 標準に由来しています。ただし、SQL Server 内の ansi_nulls
設定の影響を理解することが重要です。
ansi_nulls
ansi_nulls
設定は、SQL Server が NULL 比較を解釈する方法を決定します。
ansi_nulls ON
(デフォルト): この設定 (デフォルト) では、NULL = NULL
は ANSI SQL-92 標準に準拠して FALSE
と評価されます。
ansi_nulls OFF
: この設定では、NULL = NULL
は TRUE
と評価されます。この動作は、他の多くのプログラミング言語で NULL が扱われる方法を反映しており、多くの場合、NULL は未定義の状態を表す特別な値と見なされます。
例:
次のコード スニペットは違いを示しています。
<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
を使用すると、両方の IF
ステートメントは「TRUE」を出力します。 ansi_nulls ON
を使用すると、最初の IF
ステートメントは "FALSE" を出力し、2 番目のステートメントも "FALSE" を出力します
ansi_nulls
設定と NULL 比較に固有のあいまいさを理解することは、堅牢でエラーのない SQL Server コードを作成するために不可欠です。 予期しない結果を避けるために、クエリ内で NULL がどのように処理されるかに常に注意してください。
以上がSQL Server で NULL = NULL が False と評価されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。