今回は、タイトルの通りSQL Serverにおける末尾スペースありの文字列の比較についてまとめたいと思います。
SQL Serverでは、標準では以下の文字の比較は同一として判定されます。文字列の比較の際には、末尾のスペースは無視されます。
'AAA' = 'AAA '
実際に以下のクエリで確認してみます。公式の例を引用しました。
CREATE TABLE #tmp (c1 VARCHAR(10)); GO INSERT INTO #tmp VALUES ('abc '); INSERT INTO #tmp VALUES ('abc'); GO SELECT DATALENGTH(c1) AS 'EqualWithSpace', * FROM #tmp WHERE c1 = 'abc '; SELECT DATALENGTH(c1) AS 'EqualNoSpace ', * FROM #tmp WHERE c1 = 'abc';
末尾スペースありとなしの2つのレコードを登録してから、抽出条件も同様に末尾スペースありとなしの2パターンで検索しています。

結果は、どちらのクエリも末尾スペースありとなしの2つのレコードを抽出することができていますね。このように、SQL Serverでは末尾スペースのある文字列を比較するときには注意する必要があります。
因みに、上記の末尾スペースについては半角で検証していますが、日本語環境のデフォルトの照合順序の「Japanese_CI_AS」であれば、全角のスペースでも同様の挙動となります。
仮に照合順序を「Japanese_CI_AS_WS」として半角と全角を区別する場合は、末尾スペースありとなしは区別されるようでした。つまり、末尾スペースありとなしを比較するときに同一文字として認識されません。照合順序を変更している場合はこちらも注意が必要そうです。
今回は簡単ですが、この辺で。最後までお読みいただきありがとうございました。