2つの値を比較しようとしています-1はnullで、その他は数値ですが、どういうわけか「等しい」に等しい
declare @value1 int;
declare @value2 int;
select @value1 = null
select @value2 = 1
if (@value1 <> @value2)
print 'not equal'
else
print 'equal'
結果: 等しい
2つの値を比較しようとしています-1はnullで、その他は数値ですが、どういうわけか「等しい」に等しい
declare @value1 int;
declare @value2 int;
select @value1 = null
select @value2 = 1
if (@value1 <> @value2)
print 'not equal'
else
print 'equal'
結果: 等しい
NULL
with=
も<>
sinceもNULL
定義されていないという意味で、値を比較することはできません。
値がIS
であるかどうかを知りたい場合に使用します。次を使用できます。 NULL
IF ( ( @value1 IS NULL
AND @value2 IS NULL )
OR (( @value1 IS NOT NULL
AND @value2 IS NOT NULL
AND @value1 = @value2 )) )
PRINT 'equal'
ELSE
PRINT 'not equal'
NULL
すべての比較に失敗するため、if(null <> @value)
false です。
MSDNごと
SET ANSI_NULLS が ON の場合、NULL 値に対するすべての比較は UNKNOWN と評価されます。