I thought it was interesting that the money works and decimal does not. I did a little more testing. Based on that testing, I would almost say that the ISNULL check implicitly converts the string to a float(or money) for the money data type for the comparison but does not do that for the decimal.
DECLARE @Integer INT
,@String VARCHAR(20) = CAST('' AS FLOAT)
It makes no sense that the decimal behaves this way when the money doesn't.
Jason AKA CirqueDeSQLeilI have given a name to my pain...
MCM SQL Server, MVP
Posting Performance Based Questions - Gail Shaw