• 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));