Não há basicamente nenhuma diferença entre VARCHAR(2048) e VARCHAR(MAX) . Um está sujeito a transbordar para a unidade de alocação de "estouro de linha", o outro está sujeito a estouro na unidade de alocação de BLOB, consulte Organização de tabelas e índices . A configuração padrão da opção large value types out of row table é 0, a menos que tenha sido alterada, o VARCHAR(MAX) permanecerá na linha, se possível, assim como VARCHAR(2048) .
Eu recomendaria executar sys.dm_db_index_physical_stats e obter as linhas max, min e avg reais tamanho, bem como avg_page_space_used_in_percent . Isso fornecerá uma imagem mais precisa do (s) tamanho (s) verdadeiro (s) da linha, em vez do tamanho teórico declarado.