En SQL SERVER no requieres el TO_DATE, ya que las conversiones son IMPLICITAS, si manejas una fecha en un string y lo comparas contra un campo de tipo fecha, entonces la conversion es en AUTOMATICO.
Tu problema en realidad, es que las fechas las manejas en formato diferente a ANSI y una fecha '31-01-2007', para SQL SERVE, NO ES VALIDA
select isdate('31-01-2007')
Resultado = 0, falso que sea fecha.
Incluso, si intentaras utilizar CAST o CONVERT (que, supongo, es el comando TO_DATE en Oracle), te mandaria mensaje de error.
SELECT CAST('31-01-2007' AS DATETIME)
Msg 242, Level 16, State 3, Line 1
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
¿Como resolverlo?, manejar siempre tus fecha en formato ANSI
yyyy-mm-dd hh: mm: ss, nnn
Saludos