Я никогда не видел, чтобы это имело значение для хранения таблиц, объединений или основных операций.
Но я видел разницу в обработке строк.
В SQL Server 2005 единственный случай, когда размер varchar имеет существенные различия, - это когда все преобразуется в varchar (MAX) или в UDF. Там, кажется, есть некоторое различие - например, у меня есть система / процесс, который я портирую с несколькими ключевыми столбцами, которые должны быть объединены вместе в другое псевдо-ключевое поле (пока я не смогу реорганизовать эту мерзость) и запрос выполнялся значительно лучше, передавая результат как varchar (45) как можно быстрее в промежуточных CTE или вложенных запросах.
Я видел случаи, когда UDF, принимающий и возвращающий varchar (MAX), работает значительно хуже, чем, например, принимающий и возвращающий varchar (50). Например, функция обрезки или заполнения, которую кто-то (возможно, я!) Пытался сделать будущим доказательством. У varchar (MAX) есть свое место, но по моему опыту это может быть опасно для производительности.
Не думаю, что я описал разницу между varchar (50) и varchar (1000).