Antes de hablar sobre la pregunta, una pequeña introducción primero; Me encantan los ORMs. Y odio el SQL. Me encantan los ORM porque ocultan el desagradable error para el usuario que es el SQL y proporcionan una buena forma integrada de lenguaje para tratar con la base de datos.
Sin embargo, debo admitir que SQL tiene muchos beneficios, y el más grande es la precisión. Casi puedo discutir sobre la complejidad de una consulta SQL, sin un conocimiento detallado del esquema de la base de datos subyacente, simplemente revisando la consulta. Por lo tanto, cuando uso SQL, siempre estoy alerta, y siempre tengo una intuición acerca de hacia dónde se dirige la complejidad de un componente.
Por otro lado, cuando uso ORMs, estoy tan abrumado por la facilidad de integración de la base de datos, que literalmente olvido que incluso hay una base de datos. Esto me ha jodido varias veces. Muchas veces en el pasado, he llamado métodos ORM de apariencia inocente, que detrás de las escenas llaman uniones masivas y temibles de bases de datos, que destruyen el rendimiento.
Por eso para mí, la verdad está en algún punto intermedio. Me encanta usar los ORM, y continuaré haciéndolo, pero debo ser más cuidadoso y estudiar siempre las implicaciones (en el nivel de SQL) de cualquier llamada al método ORM. Saber las implicaciones de una capa de abstracción es oro puro en este negocio y justifica el uso de la abstracción. Cualquier otra cosa, es como dispararte a ti mismo en el pie.