C'est parce que la chaîne vide ''
n'est pas NULL
. Si vous le faites :
select Cast(null AS datetime)
SORTIE :
-----------------------
NULL
(1 row(s) affected)
CAST et CONVERT (Transact-SQL)
Lorsque des données de caractères qui représentent uniquement des composants de date ou d'heure sont converties en datetime ou smalldatetime types de données, le composant d'heure non spécifié est défini sur 00:00:00.000 et le composant de date non spécifié est défini sur 1900-01-01.