To add to what Madhivanan said: run this query and you will see that the data types returned from the case expression are are different.SELECT SQL_VARIANT_PROPERTY(
CASE
WHEN 1=1 THEN '0.55000'
ELSE 1.0
END,'BaseType')
SELECT SQL_VARIANT_PROPERTY(
CASE
WHEN 1=1 THEN '0.55000'
ELSE '1.0'
END ,'BaseType')You can also look at the precision and scale of the case expression of the numeric type and the maxlength of the varchar type to get a better understanding.
All of that comes about because the data types of each when clause in a case expression has to be of the same or it should be possible to make them so by an implicit conversion. In your first example, an implicit conversion is required because the when expression is of varchar type and the else is of decimal type. Whether it gets converted to varchar or decimal is dependent on the conversion precedence, and decimal happens to be higher in the pecking order than varchar in that regard.