ANSI SQL-92 требует, чтобы строки были одинаковой длины перед сравнением, а символ заполнения - это пробел.
См. https://support.microsoft.com/en-us/help/316626/inf-how-sql-server-compares-strings-with-trailing-spaces для получения дополнительной информации
В стандарте ANSI(доступ здесь раздел 8.2)
3) Сравнение двух строк символов определяется следующим образом:
a) If the length in characters of X is not equal to the length
in characters of Y, then the shorter string is effectively
replaced, for the purposes of comparison, with a copy of
itself that has been extended to the length of the longer
string by concatenation on the right of one or more pad char-
acters, where the pad character is chosen based on CS. If
CS has the NO PAD attribute, then the pad character is an
implementation-dependent character different from any char-
acter in the character set of X and Y that collates less
than any string under CS. Otherwise, the pad character is a
<space>.
b) The result of the comparison of X and Y is given by the col-
lating sequence CS.
c) Depending on the collating sequence, two strings may com-
pare as equal even if they are of different lengths or con-
tain different sequences of characters. When the operations
MAX, MIN, DISTINCT, references to a grouping column, and the
UNION, EXCEPT, and INTERSECT operators refer to character
strings, the specific value selected by these operations from
a set of such equal values is implementation-dependent.
Если это поведение должноИзбегайте, вы можете повернуть столбцы как часть вашего ИСКЛЮЧЕНИЯ:
SELECT 'TEST', REVERSE('TEST')
EXCEPT
SELECT 'TEST ', REVERSE('TEST ')
, который дает ожидаемый результат, хотя это довольно раздражает, особенно если вы имеете дело с несколькими столбцами.
В качестве альтернативы можно было бы найти последовательность сортировки с альтернативным символом пэда или набор опций без пэда, хотя, похоже, этого не существует в t-sql после быстрого поиска в Google.
В качестве альтернативы вы можете завершить каждый столбец символом, а затем вставить его в конец:
SELECT SUBSTRING(col,1,LEN(col -1)) FROM
(
SELECT 'TEST' + '^' as col
EXCEPT
SELECT 'TEST ' + '^'
) results