Pense no nulo como "desconhecido" nesse caso (ou "não existe"). Em nenhum desses casos, você não pode dizer que eles são iguais, porque você não sabe o valor de nenhum deles. Portanto, null=null é avaliado como não verdadeiro (falso ou nulo, dependendo do seu sistema), porque você não conhece os valores para dizer que eles são iguais. Esse comportamento é definido no padrão ANSI SQL-92.
EDIT:Isso depende da sua configuração ansi_nulls. se você tiver ANSI_NULLS desativado, isso será avaliado como verdadeiro. Execute o código a seguir para obter um exemplo...
set ansi_nulls off
if null = null
print 'true'
else
print 'false'
set ansi_nulls ON
if null = null
print 'true'
else
print 'false'