Je ne l'ai jamais vu faire une différence dans le stockage de la table, les jointures ou les opérations de base.
Mais je l'ai vu faire une différence où le traitement de chaîne est impliqué.
Dans SQL Server 2005, le seul cas que j'ai vu où la taille varchar fait des différences significatives est lorsque les choses sont transtypées en varchar (MAX) ou en UDF. Il semble y avoir une différence là - par exemple, j'ai un système/processus que je porte avec un certain nombre de colonnes clés qui doivent être concaténées ensemble dans un autre pseudo keyfield (jusqu'à ce que je suis capable de refactoriser cette abomination) et le Requête effectuée de façon significative, le résultat est obtenu sous la forme de varchar (45) dès que possible dans les CTE intermédiaires ou les requêtes imbriquées.
J'ai vu des cas où un UDF en prenant et en retournant un varchar (MAX) fonctionne significativement plus mal que l'on prend et retourne varchar (50), disons. Par exemple, une fonction de rognage ou de rembourrage que quelqu'un (peut-être moi!) Essayait de faire preuve d'avenir. varchar (MAX) a sa place, mais selon mon expérience, cela peut être dangereux pour la performance.
Je ne pense pas que je PROFILES une différence entre varchar (50) et varchar (1000).