As mentioned by a couple folks, it may not be a space. Grab a copy of ngrams8k and you use it to identify the issue. For example, here we have the text, " SPACE" with a preceding space and trailing CHAR(160) (HTML BR tag). CHAR(160) looks like a space in SSMS but isn't "trimable". For example consider this query:
DECLARE @string VARCHAR(100) = ' SPACE'+CHAR(160); SELECT '"'+@string+'"'
Using ngrams8k you could do this:
DECLARE @string VARCHAR(100) = ' SPACE'+CHAR(160); SELECT ng.position, ng.token, asciival = ASCII(ng.token) FROM dbo.ngrams8k(@string,1) AS ng;
Returns:
position token asciival ---------- ------- ----------- 1 32 2 S 83 3 P 80 4 A 65 5 C 67 6 E 69 7 160
As you can see, the first character (position 1) is CHAR(32), that's a space. The last character (postion 7) is not a space. Knowing that CHAR(160) is the issue you could fix it like so:
SET @string = REPLACE(LTRIM(@string),CHAR(160),'')
If you are using SQL Server 2017+ you can also use TRIM which does a whole lot more than just LTRIM-and-RTRIM-ing. For example, this will remove leading and trailing tabs, spaces, carriage returns, line returns and HTML BR tags.
SET @string = SELECT TRIM(CHAR(32)+CHAR(9)+CHAR(10)+CHAR(13)+CHAR(160) FROM @string)