Se llaman tablas derivadas a las subconsultas cuando se les da un nombre y son usadas después de la cláusula FROM.

Una subconsulta es un SELECT dentro de otro SELECT.

SELECT
   *
FROM
   (SELECT * FROM MiTabla) AS MiTablaDerivada

El SELECT que está a continuación del FROM generalmente no es tan simple sino que tiene alguna condición, como por ejemplo:

SELECT
   *
FROM
   (SELECT * FROM MiTabla WHERE MiCondición) AS MiTablaDerivada

Y desde luego que también podríamos tener un JOIN en ese SELECT, algo así:

SELECT
   *
FROM
   (SELECT T1.Columna1, T2.Columna2 FROM MiTabla1 T1 JOIN MiTabla2 T2 ON T1.Columna1 = T2.Columna1 WHERE MiCondición) AS MiTablaDerivada

Y también podríamos tener un GROUP BY, ORDER BY, etc.

Ejemplo 1:

SELECT
   *
FROM
   (SELECT * FROM BANCOS) AS MiTabla

El resultado obtenido es el mismo que si hubiéramos escrito FROM BANCOS, ahorrándonos escritura, así que no tendría sentido escribir de más.

DERIVADAS1

Captura 1. Si haces clic en la imagen la verás más grande

Ejemplo 2:

SELECT
   *
FROM
   (SELECT * FROM BANCOS WHERE BAN_NOMBRE LIKE 'BAN%') AS MisBancos

DERIVADAS2

Captura 2. Si haces clic en la imagen la verás más grande

 Nuevamente, no era necesario usar tablas derivadas para conseguir este resultado. Está aquí solamente para mostrar como pueden ser utilizadas.

Ejemplo 3:

SELECT
   AVG (CantidadComprada)
FROM
   (SELECT CMC_FECHAX, COUNT(*) AS CantidadComprada FROM COMPRASCAB GROUP BY CMC_FECHAX) AS Compras

En este caso a nuestra tabla derivada la llamamos “Compras”. Ahora sí fue útil usar una tabla derivada.

¿Cuándo usaríamos una tabla derivada?

Cuando queremos anidar funciones agregadas, como en el Ejemplo 3: hallar el promedio de las cantidades compradas. O cuando queremos filtrar las filas de la tabla principal antes de un JOIN.

Artículos relacionados:

Optimizando los JOIN

El índice del blog Firebird21