Se você quer dizer: "Existe uma penalidade por declarar o tamanho do campo maior que qualquer valor que realmente esteja armazenado nele?", Desde que seja declarado varchar, a resposta é não. Todo mecanismo de banco de dados SQL que eu conheço armazena apenas o número de caracteres realmente fornecido nos dados (mais um valor de comprimento). Portanto, se você definir o campo como varchar (100), mas armazenar apenas 10 caracteres, ele ocupará apenas 10 caracteres no disco (mais 2 bytes ou mais para o comprimento). Em caso de dúvida, rotineiramente faço meus campos varchar ridiculamente grandes.
Se você quer dizer "Existe uma penalidade para armazenar campos de caracteres longos", a resposta é sim. Hoje, o espaço em disco é barato, mas não é gratuito; portanto, você não deseja desperdiçá-lo sem motivo. Provavelmente mais importante, leva tempo para ler os dados do disco; portanto, quanto mais longos os campos de dados, mais lento o programa se torna. Se o campo estiver indexado, isso pode realmente atrasar suas recuperações, pois todas as leituras terão que comparar o valor da chave com esse grande e longo campo.
Lembre-se de que, se você fornecer ao usuário um campo de entrada de grande volume de dados, ele o usará, mais cedo ou mais tarde.
Tudo isso dito, eu errei por ser muito grande, e não muito pequena. O espaço em disco é barato o suficiente para que você não queira forçar os usuários a inventar abreviações rapidamente, porque eles não podem ajustar os dados reais no campo disponível. O sistema em que estou trabalhando hoje tem um campo de descrição do produto que é muito pequeno para muitos dos nomes reais de nossos produtos, portanto, os usuários precisam abreviar. E, é claro, todos os usuários abreviam de maneira diferente, por isso temos vinte maneiras diferentes de dizer a mesma coisa.