"La optimización prematura es la raíz de todo mal (la mayor parte, de todos modos) en la programación de computadoras" - Donald Knuth
La base de datos es exactamente eso; La capa de datos de su aplicación. Su trabajo es proporcionar a su aplicación los datos solicitados y almacenar los datos que se le proporcionan. Su aplicación es el lugar para colocar el código que realmente funciona con los datos; mostrarlo, validarlo, etc.
Si bien el sentimiento en la línea del título es admirable y preciso hasta cierto punto (el meollo del filtrado, la proyección, la agrupación, etc. , en el abrumador número de casos debería dejarse al DB), una definición de "bien" podría estar en orden. Las tareas que SQL Server puede ejecutar con un alto nivel de rendimiento son muchas, pero las tareas que puede demostrarque SQL Server hace correctamente de manera aislada y repetible son muy pocos. SQL Management Studio es un gran IDE de base de datos (especialmente teniendo en cuenta las otras opciones con las que he trabajado como TOAD), pero tiene sus limitaciones, la primera de ellas es que casi todo lo que usa (o cualquier código de procedimiento que ejecute) el DB debajo) es, por definición, un "efecto secundario" (estado alterado que se encuentra fuera del dominio del espacio de memoria de su proceso). Además, el código de procedimiento dentro de SQL Server solo ahora, con los últimos IDE y herramientas, se puede medir de la manera en que el código administrado puede usar métricas de cobertura y análisis de ruta (por lo que puede demostrar que esto es particular si la declaración se encuentra en las pruebas X , Y y Z, y la prueba X está diseñada para hacer que la condición sea verdadera y ejecutar esa mitad mientras Y y Z ejecutan el "else" . Eso, a su vez, supone que tiene una prueba que puede configurar la base de datos con un estado inicial particular, ejecutar el código de procedimiento de la base de datos a través de alguna acción y afirmar los resultados esperados.
Todo esto es mucho más difícil e involucrado que la solución provista por la mayoría de las capas de acceso a datos; suponga que la capa de datos (y, para el caso, el DAL) sabe cómo hacer su trabajo cuando se le da la entrada correcta, y luego compruebe que su código proporciona la entrada correcta. Al mantener el código de procedimiento como SP y disparadores fuera de la base de datos y, en su lugar, hacer ese tipo de cosas en el código de la aplicación, dicho código de la aplicación es mucho más fácil de ejercer.