В SQL Server помните, что NULL не возвращает проверку на равенство TRUE ни с чем (если вы не играете с ANSI_NULLS):
SELECT 1
WHERE 1=NULL
SELECT 1
WHERE NULL = NULL
Возвращает True только тогда, когда вы используете IS / IS NOT
SELECT 1
WHERE NULL IS NULL
Для вашего последнего запроса единственной записью, удовлетворяющей этому требованию в предложении WHERE, является строка NULL.Эквивалент:
SELECT id FROM #Tmp
WHERE id IS NULL
Чтобы решить вашу проблему, добавьте туда второе предложение:
SELECT id FROM #Tmp
WHERE NOT EXISTS(
SELECT 1
FROM #Tmp1
WHERE #Tmp1.id = #Tmp.id OR #Tmp.id IS NULL
)