CTE är bara ett alias för frågan.
Den kan (eller kanske inte) köras om varje gång den används.
Det finns inget rent sätt att tvinga fram CTE materialisering i SQL Server (som Oracles /*+ MATERIALIZE */ ), och du måste göra smutsiga trick som detta:
CTE kan förbättra prestandan om den används i planer som bara kräver en utvärdering (som HASH JOIN , MERGE JOIN etc.).
I dessa scenarier kommer hashtabellen att byggas direkt från CTE , medan du använder temp-tabellen kommer att kräva utvärdering av CTE , drar resultaten in i temptabellen och läser temptabellen igen.