É apenas é .
Eu nunca notei um problema, porque uma das minhas verificações seria garantir que meus parâmetros correspondam aos comprimentos das colunas da minha tabela. No código do cliente também. Pessoalmente, espero que o SQL nunca veja dados muito longos. Se eu visse dados truncados, seria óbvio o que causou isso.
Se você sentir a necessidade de varchar(max), tome cuidado com um grande problema de desempenho devido à precedência do tipo de dados. varchar(max) tem precedência mais alta que varchar(n) (mais longo é mais alto). Portanto, neste tipo de consulta, você obterá uma varredura, não uma busca e cada valor de varchar (100) é CAST para varchar (max)
UPDATE ...WHERE varchar100column = @varcharmaxvalue
Editar:
Há um item do Microsoft Connect aberto sobre esse problema.
E provavelmente é digno de inclusão nas configurações Strict de Erland Sommarkog (e no item Connect correspondente).
Edit 2, após o comentário de Martins:
DECLARE @sql VARCHAR(MAX), @nsql nVARCHAR(MAX);
SELECT @sql = 'B', @nsql = 'B';
SELECT
LEN(@sql),
LEN(@nsql),
DATALENGTH(@sql),
DATALENGTH(@nsql)
;
DECLARE @t table(c varchar(8000));
INSERT INTO @t values (replicate('A', 7500));
SELECT LEN(c) from @t;
SELECT
LEN(@sql + c),
LEN(@nsql + c),
DATALENGTH(@sql + c),
DATALENGTH(@nsql + c)
FROM @t;