Het zou moeten zijn, of helemaal niet:
SELECT ...
CASE
WHEN ISDATE(ColumnName) = 1 THEN CONVERT(datetime, ColumnName, 103)
ELSE NULL
END
....
maar u gebruikt ISDATE WITH CONVERT niet, omdat er geen uitdrukking is zoals
ISDATE(CONVERT(varchar,ColumnName,112))
zonder de geneste conversie is de retourwaarde afhankelijk van zaken als taalinstellingen, vandaar dat het niet-deterministisch gedrag is. Zonder "externe" kennis is het niet mogelijk om het resultaat te voorspellen dat men krijgt, alleen op basis van de input.