È perché la stringa vuota ''
non è NULL
. Se lo fai:
select Cast(null AS datetime)
USCITA:
-----------------------
NULL
(1 row(s) affected)
CAST e CONVERT (Transact-SQL)
Quando i dati dei caratteri che rappresentano solo la data o solo i componenti dell'ora vengono trasmessi a datetime o smalldatetime tipi di dati, il componente temporale non specificato è impostato su 00:00:00.000 e il componente data non specificato è impostato su 01-01-1900.