Si quiere decir, "¿Hay una penalización por declarar el tamaño del campo más grande que cualquier valor que realmente esté almacenado en él?", Entonces, siempre que se declare varchar, la respuesta es no. Todos los motores SQL DB que conozco almacenan solo el número de caracteres realmente dados en los datos (más un valor de longitud). Entonces, si define el campo como varchar (100) pero solo almacena 10 caracteres en él, solo ocupará 10 caracteres en el disco (más 2 bytes más o menos para la longitud). En caso de duda, rutinariamente hago que mis campos varchar sean ridículamente grandes.
Si quiere decir, "¿Hay una penalización por almacenar campos de caracteres largos", la respuesta es sí. El espacio en disco hoy es barato, pero no es gratuito, por lo que no debe desperdiciarlo sin ningún motivo. Probablemente más importante, lleva tiempo leer los datos del disco, por lo que cuanto más largos sean los campos de datos, más lento se volverá el programa. Si el campo está indexado, esto realmente puede ralentizar sus recuperaciones, ya que cada lectura tendrá que comparar el valor clave con este gran campo largo.
Tenga en cuenta que si le da al usuario un gran campo de entrada de datos, lo usará, tarde o temprano.
Dicho todo esto, me equivocaría del lado de demasiado grande en lugar de demasiado pequeño. El espacio en disco es lo suficientemente barato como para no obligar a los usuarios a inventar abreviaturas sobre la marcha porque no pueden ajustar los datos reales en el campo disponible. El sistema en el que estoy trabajando hoy tiene un campo de descripción del producto que es demasiado pequeño para muchos de los nombres reales de nuestros productos, por lo que los usuarios deben abreviar. Y, por supuesto, cada usuario abrevia de manera diferente, por lo que tenemos veinte formas diferentes de decir lo mismo.