I always design my tables with appropriate length varchar fields for the data I expect to be contained within them. I also generally define my keys to be of INT type and use these for JOINS etc as it's always given me the best performance.
I have to work on an existing project where a lot of the key columns are varchars, hence there are many indexes on such fields, which is not an issue by itself. However there are several instances where these columns are defined as varchar(255) whereas for example a varchar(10) would actually do fine for the data contained in the column. (either laziness, or perhaps the table was created via an import originally (see above - laziness!))
My reasoning has always been that having appropriately sized columns, means that SQL Server will perform better as indexes will be tighter, and more likely execution plans will be more optimised, and actual query execution will be more memory efficient. This is more based off gut feel than anything concrete and trying to find written evidence to present to allow my recommendations of changing the tables to have appropriate sized columns hasn't turned up anything I'd be happy to stand by.
Am I correct? And if so can anyone point me at some documented evidence?