Pensa al null come "sconosciuto" in quel caso (o "non esiste"). In nessuno di questi casi, non puoi dire che sono uguali, perché non conosci il valore di nessuno dei due. Quindi, null=null restituisce non true (false o null, a seconda del tuo sistema), perché non conosci i valori per dire che SONO uguali. Questo comportamento è definito nello standard ANSI SQL-92.
EDIT:dipende dalla tua impostazione ansi_nulls. se hai ANSI_NULLS disattivato, questo verrà valutato come true. Esegui il codice seguente per un esempio...
set ansi_nulls off
if null = null
print 'true'
else
print 'false'
set ansi_nulls ON
if null = null
print 'true'
else
print 'false'