NULL を値と比較することが t-SQL で合法であるかどうかに興味がありましたか?
たとえば、私が持っている場合:
WITH ctx AS(SELECT 123 AS n0, NULL AS n1)
SELECT n0 FROM ctx
WHERE ctx.n1 < 130
その場合の WHERE 句は常に FALSE として評価されます。それは私が信頼できるものですか?
NULL を値と比較することが t-SQL で合法であるかどうかに興味がありましたか?
たとえば、私が持っている場合:
WITH ctx AS(SELECT 123 AS n0, NULL AS n1)
SELECT n0 FROM ctx
WHERE ctx.n1 < 130
その場合の WHERE 句は常に FALSE として評価されます。それは私が信頼できるものですか?
NULL を他の値と比較することはできません。結果は'UNKNOWN'
.
msdn ソースから
NULL の値は、値が不明であることを示します。NULL の値は、空またはゼロの値とは異なります。2 つのヌル値が等しいことはありません。2 つの null 値の比較、または NULL とその他の値の比較では、それぞれの NULL の値が不明であるため、unknown が返されます。
null 値を持つ T-Sql のすべてのブール演算は、'UNKNOWN' を返します。これは、句で false として認識されます。デフォルト値を設定したい場合は、ISNULL関数を使用できます。たとえば、あなたの場合:
WITH ctx AS(SELECT 123 AS n0, NULL AS n1)
SELECT n0 FROM ctx
WHERE isnull(ctx.n1,0) < 130
ANSI_NULLS の値に依存します。
http://msdn.microsoft.com/en-us/library/ms191270%28v=sql.90%29.aspx
SET ANSI_NULLS が ON の場合、1 つまたは複数の式が NULL である比較では、TRUE または FALSE は得られません。UNKNOWN が返されます。
Transact-SQL は、null 値と比較するときに比較演算子が TRUE または FALSE を返すことを可能にする拡張機能をサポートしています。このオプションは、ANSI_NULLS を OFF に設定することで有効になります。ANSI_NULLS が OFF の場合、ColumnA = NULL などの比較では、ColumnA に NULL 値が含まれている場合は TRUE が返され、ColumnA に NULL 以外の値が含まれている場合は FALSE が返されます。
次の WHERE 句=
も FALSE です。NULL には細心の注意を払う必要があります
WITH ctx AS
(
SELECT 123 AS n0, NULL AS n1
)
SELECT *
FROM ctx
WHERE ctx.n1 = NULL
私は常にEXISTSキーワードをEXCEPTと一緒に使用してきました
SELECT 1
WHERE EXISTS ((SELECT 1) EXCEPT (SELECT NULL))