Here's my take on it.
Like Qik3coder said, stored procedures are "compiled" on the server. When you run a query, there are multiple steps that SQL Server goes through to provide you with the requested data. One of the steps is to determine the most efficient way to return the data. The "compiled" part is this step where it determines the optimal way to get the data. Unless your query is very complicated, this step is usually very fast (think micro-seconds).
Using a stored procedure will allow you to bypass this step (that usually takes micro-seconds). When you run a query (not in a stored procedure), SQL Server needs to perform this step for you. A lot of people mistakenly think that this step is done every time you run the query, which is not exactly true. Even for ad-hoc queries (not in a stored procedure), SQL Server can still re-use the execution plan.
Which is faster? I would say that they should all run in approximately the same amount of time.
Personally, I prefer to use stored procedures. My main reason is that I think they are easier to use. Let me explain...
If you discover a bug in the application, and that bug involves a stored procedure, you can connect to the database, fix the query, and move on.
If you discover a bug in the application and that bug involves a view, it's a similar situation where you go in to the database, fix the view, and move on.
If you discover a bug in the application and that bug involves a query, you would then need to find the query in the code, and change it. The part that bothers me about this is... you have to replace the entire code file. In some situations, someone else may have made a change to the code file which hasn't been completely tested yet, which could lead to other bus with other parts of the application.
By keeping the query contained within the database, it is easier to change just one small part without it affecting other parts of the system.
I usually stay away from views. The problem with a view is that it is essentially a query underneath. The underlying query usually has some sort of complexity that you want to hide. The problem is, the underlying query could use another view, which uses another view, and so on. At some point, when there are too many levels of nested views, the query optimizer has a difficult time generating the most optimal execution plan.
These are my reasons. Your mileage may vary.
-George
Microsoft SQL Server MVP
My Blogs
SQLCop
twitter
"The great things about standards is that there are so many to choose from." - Fortune Cookie Wisdom