Es porque la cadena vacía ''
no es NULL
. Si lo hace:
select Cast(null AS datetime)
SALIDA:
-----------------------
NULL
(1 row(s) affected)
CAST y CONVERTIR (Transact-SQL)
Cuando los datos de caracteres que representan solo la fecha o solo los componentes de la hora se envían a datetime o pequeña fecha y hora tipos de datos, el componente de hora no especificado se establece en 00:00:00.000 y el componente de fecha no especificado se establece en 1900-01-01.