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.