Subconsultas correlacionadas
Todas las subconsultas que hemos visto hasta ahora eran no correlacionadas (independientes). Podían ejecutarse de forma autónoma respecto a la consulta principal, y podíamos ver qué devolvían antes de usar su resultado en la consulta principal. Las subconsultas correlacionadas, en cambio, hacen referencia a una o varias columnas de la consulta principal.
Ejemplo de subconsulta correlacionada
Por ejemplo, la siguiente subconsulta correlacionada calcula quién ha gastado y cuánto:
MySQL 8.4SELECT FamilyMembers.member_name, ( SELECT SUM(Payments.unit_price * Payments.amount) FROM Payments WHERE Payments.family_member = FamilyMembers.member_id ) AS total_spent FROM FamilyMembers;
En este caso, la subconsulta correlacionada hace referencia a la columna member_id de la consulta principal.
Una subconsulta correlacionada se diferencia de una no correlacionada en que no se ejecuta una sola vez antes de la consulta en la que está anidada, sino para cada fila que puede entrar en el resultado final.
Así, en nuestro caso, la consulta principal a la tabla FamilyMembers devuelve 8 registros, y para cada uno de ellos se ejecuta la subconsulta correlacionada.
Impacto en el rendimiento
Ten en cuenta que las subconsultas correlacionadas pueden causar problemas de rendimiento, sobre todo si la consulta que las contiene devuelve muchas filas, ya que la subconsulta correlacionada se ejecutará por separado para cada una de esas filas.