No puede mezclar tipos de datos en expresiones CASE (o al menos sin tener cuidado de que implícitamente emitan OK)
cuando se enfrenta a una declaración como la siguiente, SQL Server utilizará la precedencia del tipo de datos para determinar cuál debe ser el tipo de datos general de la expresión
SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END
Para el datetime
anterior tiene mayor precedencia que char
por lo que implícitamente convierte la cadena en una fecha que falla.
Sin embargo, lo siguiente tiene éxito como sql_variant
tiene mayor precedencia
SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END
Entonces puede devolver múltiples tipos de datos mixtos de esa manera (no estoy seguro de cuán fácil sql_variant
es para trabajar sin embargo)
Aparte de eso, podría devolver NULL
para fechas y horas no válidas en lugar de devolver los datos sin sentido o convertir todo en una cadena si debe devolverlo.