Это из-за Приоритет типа данных
Когда оператор объединяет два выражения разных типов данных, правила для приоритета типа данных указывают, что тип данных с более низкимприоритет преобразуется в тип данных с более высоким приоритетом.Если преобразование не поддерживается неявным преобразованием, возвращается ошибка.Если оба выражения операнда имеют одинаковый тип данных, результат операции имеет этот тип данных.
Примечание: Can also subtract a number, in days, from a date
Ссылка: http://msdn.microsoft.com/en-us/library/ms189518.aspx
Дата и время имеют приоритет надvarchar и int имеют приоритет над varchar
В вашем примере
select (1 - '+') - CONVERT(datetime,'01/01/2010',101)
Это успешно из-за 1 - '+'
= 1, который можно вычесть из даты.
select 1 - CONVERT(datetime,'01/01/2010',101) - '+'
Это не удается, потому что 1-anydate = дата, но когда вы пытаетесь вычесть '+', вы не можете конвертировать дату и время таким способом.