Deixe-me responder com algumas citações da documentação do SQL Server.
char e varchar
Conversão de dados de caracteres
Então, seu varchar é declarado como um
varchar(1) , e a conversão implícita em seu SET instrução (de uma string literal de comprimento 3 para um varchar(1) ) trunca dog para d .