As CHAR
is a fixed length string data type, so any remaining space in the field is filled with blanks.
In your scenario, SET @ret = @ret + '55'
will try to store 22 character but unfortunately, the variable is already declared as 20 character long so it truncated the result back to 20 character..Hence, you'll have 20 character with truncating last 2 character i.e. '55'.
Use char
data type only when you are sure about the length of data which particular char
data type column have to hold....
If you use nvarchar(20) instead of char(20), it will work fine...
DECLARE @ret nvarchar (20)
SET @ret = '4'
SET @ret = @ret + '55'
See the SQLFIDDLE