About E-bay’s comments of put joins operation in application layer, I really doubt about it. For example, MS has being putting many efforts in ADO.NET on application side. Its one object DataSet is very powerful. The many functions like referential integrity, sorting, data filtering can be done there but not joins.
One good example using SP is multi-tables insert operation (some late inserting relies on result(s) of previous inserting. If you put the operations in application layer, you need many database calls. On the other hand, you only need one database by using SP. One of other benefits is security. Using SP can efficiently prevent from malicious SQL attacks.
Of course, nothing is perfect. In order to utilize recourse efficiently, it’s better to put as much tasks as possible in application layer to save expensive database resource.
One good example using SP is multi-tables insert operation (some late inserting relies on result(s) of previous inserting. If you put the operations in application layer, you need many database calls. On the other hand, you only need one database by using SP. One of other benefits is security. Using SP can efficiently prevent from malicious SQL attacks.
Of course, nothing is perfect. In order to utilize recourse efficiently, it’s better to put as much tasks as possible in application layer to save expensive database resource.