Todos los productos
Search
Centro de documentos

OpenSearch:Expresiones de tabla común

Última actualización: Sep 05, 2026

Una expresión de tabla común (CTE) es una subconsulta con nombre cuyo alcance se limita a una sola consulta. Puede considerarla como una vista temporal definida en la cláusula WITH que permite asignar un nombre a un conjunto de resultados intermedio y hacer referencia a él dentro de la misma instrucción. Las CTE facilitan la lectura y el mantenimiento de consultas complejas al dividirlas en bloques reutilizables con nombres descriptivos.

Sintaxis

WITH expression_name[(column_name [,...])]
AS
   (CTE_definition)
SQL_statement;

La cláusula WITH consta de cuatro componentes:

Componente

Obligatorio

Descripción

Nombre de la CTE

Sí

Nombre asignado a la CTE. Utilice este nombre más adelante en la misma instrucción SQL.

Lista de columnas

No

Nombres de las columnas de salida entre paréntesis, separados por comas. La cantidad y los tipos de datos deben coincidir con las columnas que devuelve la cláusula AS. Si se omite, la CTE hereda los nombres de columna de la cláusula AS.

Cláusula AS

Sí

Consulta que genera el conjunto de resultados de la CTE. La CTE devuelve exactamente lo que produce esta consulta.

Instrucción SQL principal

Sí

Consulta externa que hace referencia a la CTE por su nombre.

Limitaciones

Actualmente, las CTE solo son compatibles con instrucciones SELECT.

Ejemplos

CTE sencilla

Defina una CTE llamada T_CTE y seleccione todas sus filas directamente:

WITH T_CTE (i1_cte,i2_cte) AS (SELECT i1,i2 FROM t1)
SELECT * FROM T_CTE

CTE en una cláusula JOIN

Haga referencia a la CTE en un JOIN para combinarla con otra tabla:

WITH T_CTE (i1_cte,i2_cte) AS (SELECT i1,i2 FROM t1)
SELECT * FROM t2 JOIN T_CTE ON t2.i1 = T_CTE.i1_cte AND t2.i2 = T_CTE.i2_cte

CTE en una subconsulta WHERE EXISTS

Utilice la CTE como filtro dentro de una cláusula WHERE EXISTS:

WITH T_CTE (i1_cte,i2_cte) AS (SELECT i1,i2 FROM t1)
SELECT * FROM t2 WHERE EXISTS (SELECT * FROM T_CTE WHERE t2.i1 = i1_cte AND t2.i2 = i2_cte)

Preguntas frecuentes

¿El uso de una CTE ralentiza mi consulta?

No. Una CTE define un conjunto de resultados temporal, pero no se ejecuta como un paso independiente. La base de datos expande la definición de la CTE al generar el plan de ejecución, por lo que tanto la CTE como la consulta principal se optimizan de forma conjunta. El plan de ejecución resultante no es más complejo que el de una consulta equivalente escrita sin CTE y el rendimiento es idéntico.