Come mostrato in Utilizzo di espressioni di tabella comuni su MSDN, è possibile definire un CTE come:
WITH expression_name [ ( column_name [,...n] ) ]
AS
( CTE_query_definition )
e usalo come:
SELECT <column_list> FROM expression_name;
Diciamo che ho seguito 2 CTE
with cte1 as(
select name from Table1
)
with cte2(name) as(
select name from Table1
)
Una query genera gli stessi risultati per entrambi i CTE poiché la query interna è la stessa. L'unica differenza tra questi due è che cte2 ha il nome di colonna ( (name)
) definito nella sua dichiarazione.
Quando eseguo entrambi i CTE, non vedo alcuna differenza nel piano di esecuzione.
Sono solo curioso di sapere:
- Che differenza fa se non specifico alcun nome di colonna nella definizione CTE?
- Perché dovrei / non dovrei specificare i nomi delle colonne durante la creazione di CTE?
- Influisce per caso sul piano di esecuzione delle query? (Per quanto ho visto, non fa alcuna differenza.)