Я вижу, что T-SQL заказывает varchar, который начинается с символа особым образом.
Попробуйте это:
declare @test as table (val varchar(5) not null)
insert into @test
values ('aaaa'), ('aabb'), ('-aaa'), ('+aaa'), ('ciao'), ('-bb'), ('+bb'), ('bau'), ('bcd')
select * from @test order by val
Возвращает:
- + ааа
- + бб
- -aaa
- аааа
- ААББ
- бау
- -bb
- BCD
- чао
Так что минус иногда игнорируется при сравнении букв, но используется по сравнению с другими символами ...
Я пытался найти объяснение этому поведению в MSDN, но не нашел его ...
Есть какое-то известное правило об этом?