Piense en el nulo como "desconocido" en ese caso (o "no existe"). En cualquiera de esos casos, no puedes decir que son iguales, porque no sabes el valor de ninguno de ellos. Entonces, null=null se evalúa como falso (falso o nulo, según su sistema), porque no conoce los valores para decir que SON iguales. Este comportamiento está definido en el estándar ANSI SQL-92.
EDITAR:Esto depende de su configuración ansi_nulls. si tiene ANSI_NULLS desactivado, esto se evaluará como verdadero. Ejecute el siguiente código para ver un ejemplo...
set ansi_nulls off
if null = null
print 'true'
else
print 'false'
set ansi_nulls ON
if null = null
print 'true'
else
print 'false'