Local variables are assigned the value NULL when they are declared, and may be assigned the null value by a select statement.
The special meaning of NULL requires that the comparison between null-value variables and other null values follow special rules.
This table shows the results of comparisons between null-value columns and null-value expressions using different comparison operators. An expression can be a variable, a literal, or a combination of variables, literals, and arithmetic operators.
Type of Comparison |
Using the = Operator |
Using the <, >, <=, !=, !<, !>, or <> Operator |
---|---|---|
Comparing column_value to column_value |
FALSE |
FALSE |
Comparing column_value to expression |
TRUE |
FALSE |
Comparing expression to column_value |
TRUE |
FALSE |
Comparing expression to expression |
TRUE |
FALSE |
For example, this test:
declare @v int, @i int if @v = @i select "null = null, true" if @v > @i select "null > null, true"
shows that only the first comparison returns true:
----------------- null = null, true (1 row affected)
This example returns all the rows from the titles table where the advance has the value NULL:
declare @m money select title_id, advance from titles where advance = @m
title_id advance -------- ---------------- MC3026 NULL PC9999 NULL (2 rows affected)
Using a not in clause when you compare a null value with a null value produces different results, depending on whether the variable or column contains the null values. This table shows the results compares between not null-value columns and null-value expressions using different comparison operators
Type of Comparison |
Using the = Operator |
Using the <, >, <=, !=, !<, !>, or <> Operator |
---|---|---|
Comparing column_value to column_value |
||
Comparing column_value to expression |
||
Comparing expression to column_value |
||
Comparing expression to expression |
create table #test(i int not null, a char(5) null) insert into #test(i) values (1)
declare @a char(5) select @a = a from #test where i = 1 if @a not in ('NTTRD', 'NTOFF') print 'true' else print 'false' true
if (select a from #test where i = 1) not in ('NTTRD', 'NTOFF') print 'true' else print 'false' false