Odd inconsistent behavior of SQL Server "IN" clause
NOT IN will not evaluate to true when one or more NULL values are returned by the subquery. 

Use NOT EXISTS to avoid this common gotcha. See this answer for more information and links to more detailed information.