Una subconsulta correlacionada es una subconsulta que contiene una referencia a una tabla que también aparece en la consulta exterior. Por ejemplo:
SELECT * FROM t1 WHERE column1 = ANY (SELECT column1 FROM t2 WHERE t2.column2 = t1.column2);
          Tenga en cuenta que la subconsulta contiene una referencia a
          una columna de t1, incluso aunque la
          cláusula FROM de la subconsulta no
          menciona una tabla t1. Por lo tanto, MySQL
          busca fuera de la subconsulta y encuentra
          t1 en la consulta externa.
        
          Suponga que la tabla t1 contiene un
          registro en que column1 = 5 y
          column2 = 6; mientras, la tabla
          t2 contiene un registro en que
          column1 = 5 y column2 =
          7. La expresión ... WHERE column1 = ANY
          (SELECT column1 FROM t2) sería
          TRUE, pero en este ejemplo, la cláusula
          WHERE dentro de la subconsulta es
          FALSE (ya que (5,6) no
          es igual a (5,7)), así que la subconsulta
          como un todo es FALSE.
        
Regla de visibilidad: MySQL evalúa desde dentro hacia fuera. Por ejemplo:
SELECT column1 FROM t1 AS x WHERE x.column1 = (SELECT column1 FROM t2 AS x WHERE x.column1 = (SELECT column1 FROM t3 WHERE x.column2 = t3.column1));
          En este comando, x.column2 debe ser una
          columna en la tabla t2 ya que
          SELECT column1 FROM t2 AS x ... renombra
          t2. No hay una columna en la tabla
          t1 porque SELECT column1 FROM t1
          ... es una consulta externa que está
          demasiado afuera.
        
          Para subconsultas en cláusulas HAVING u
          ORDER BY , MySQL busca nombres de columna
          en la lista de selección exterior.
        
Para ciertos casos, una subconsulta correlacionada es óptima. Por ejemplo:
valIN (SELECTkey_valFROMtbl_nameWHEREcorrelated_condition)
De otro modo, son ineficientes y lentas. Reescribir la consulta como un join puede mejorar el rendimiento.
Las subconsultas correlacionadas no pueden referirse a los resultados de funciones agregadas de la consulta exterior.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

