Como se muestra en Uso de expresiones de tabla comunes en MSDN, puede definir un CTE como:
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
y úsalo como:
SELECT <column_list> FROM expression_name;
Digamos que tengo los siguientes 2 CTE
with cte1 as(
select name from Table1
)
with cte2(name) as(
select name from Table1
)
Una consulta genera los mismos resultados para ambos CTE que la consulta interna es la misma. La única diferencia entre estos dos es que cte2 tiene el nombre de columna ( (name)
) definido en su declaración.
Cuando ejecuto ambos CTE, no veo ninguna diferencia en el plan de ejecución.
Tengo curiosidad por saber:
- ¿Qué diferencia hay si no especifico ningún nombre de columna en la definición de CTE?
- ¿Por qué debería / no debería especificar nombres de columna al crear CTE?
- ¿Afecta el plan de ejecución de consultas por casualidad? (Por lo que he visto, no hace ninguna diferencia).