• I see that even if you set

    @v1 sql_variant = cast ('15.00' as float(53)),

    @v2 sql_variant = cast ('16.00' as decimal(18,4)),

    which makes

    v1 v2

    1516.0000

    SQL Server still says v1 > v2.

    This behaviour is very counter-intuitive - to say nothing of being arithmetically incorrect!

    It would be better if it produced the result one would expect - or if it won't, if it refused to do such comparisons. I can imagine many data errors being caused by people not noticing this behaviour and believing the wrong results they get.