Can someone please explain this strange behaviour:
select a from (
select '1' as a
union all
select '2' as a
union all
select '-3' as a
) as b
order by a desc
select a from (
select '4' as a
union all
select '5' as a
union all
select '-3' as a
) as b
order by a desc
Result for query 1:
-3
2
1
Result for query 2:
5
4
-3
It looks like -
character is ignored. I though, that SQL Server orders varchars based on ASCII code.
So expected result would be:
2
1
-3 //ascii - is before 0-9
and:
5
4
-3 //ascii - is before 0-9
I get same result if I add a letter before number:
select a from (
select 'a1' as a
union all
select 'a2' as a
union all
select '-a3' as a
) as b
order by a desc
select a from (
select 'a4' as a
union all
select 'a5' as a
union all
select '-a3' as a
) as b
order by a desc