NULL values are excluded. Why?
SQL uses three valued logic.
t1.[Column1] NOT IN ('Cross/Up sell', 'Renegotiation', 'Renewal')
is equivalent to
t1.[Column1] <> 'Cross/Up sell' AND
t1.[Column1] <> 'Renegotiation' AND
t1.[Column1] <> 'Renewal')
When t1.[Column1] is NULL
this expression evaluates to UNKNOWN
rather than TRUE
so these rows are not returned.
The only time NULL NOT IN ( ... )
will be returned is if the NOT IN
clause evaluates to an empty set.
This is actually a common mistake made with SQL Server in treating NULL as a value. By default, it's treated as UNKNOWN, as documented here. So, in your view, you also need to include an OR t1.[Column1] IS NULL
.
You can change this behavior by calling SET ANSI_NULLS OFF
. It is not recommended to use this, however, as the feature is deprecated as pointed out by @Martin Smith.
This is not a SQL Server specific issue, however. It's part of the ANSI SQL standard.