Actually the explanation of the behavior of the fist SELECT statement is not very accurate:
"because DATETIME has a higher precedence than INT 2 is converted to a DATETIME which results in '1900-01-03 00:00:00.000' so the end result is '2010-01-03 00:00:00.000'."
In fact with "+" and "-" arithmetic operations the datetime values convert to numeric and after the operation they convert back to datetime. Otherwise it's very hard to define "addition" and "subtraction" between dates :-D. Run the following script:
DECLARE@Var0 datetime
,@Var1 datetime
,@Var2 datetime
,@Var3 datetime;
SELECT@Var0 = '01/01/2010'
,@Var1 = '1900-01-03 00:00:00.000'
,@Var2 = '1900-01-03 11:00:00.000'
,@Var3 = 2;
SELECT CAST(CAST(@Var1 AS decimal(38,19)) + CAST(@Var0 AS decimal(38,19)) AS datetime);
SELECT CAST(@Var1 AS decimal(38,19)), CAST(@Var0 AS decimal(38,19));
SELECT CAST(CAST(@Var2 AS decimal(38,19)) + CAST(@Var0 AS decimal(38,19)) AS datetime);
SELECT CAST(@Var2 AS decimal(38,19)), CAST(@Var0 AS decimal(38,19));
SELECT CAST(CAST(@Var3 AS decimal(38,19)) + CAST(@Var0 AS decimal(38,19)) AS datetime);
SELECT CAST(@Var3 AS decimal(38,19)), CAST(@Var0 AS decimal(38,19));