Jakiś czas temu Brent Ozar opublikował post opisujący niektóre różnice między SQL Server a PostgreSQL:
Dwie ważne różnice między SQL Server a PostgreSQL
Pierwszy punkt („CTE to ogrodzenia optymalizacyjne”) przykuł moją uwagę, ponieważ jest oczywiste, że w podanym przykładzie SQL Server łączy CTE i główne zapytanie razem i optymalizuje je jako pojedyncze zapytanie (w przeciwieństwie do odwrotnego zachowania w PostgreSQL).
Jednak to zachowanie wydaje się sprzeczne z przykładami, które widziałem w innych blogach i klasach szkoleniowych, w których SQL Server traktuje CTE jako płot optymalizacyjny, który pozwala na lepsze wykorzystanie indeksów, lepszą wydajność itp. Na przykład:
Lepszy sposób na wybór gwiazdy
Wygląda więc na to, że SQL Server „honoruje” CTE SOMETIMES. Czy są dostępne jakieś dobre zasoby, które dokumentują konkretną listę znanych przypadków, w których SQL Server niezawodnie honoruje CTE jako płot optymalizacyjny (lub odwrotne zachowanie)?
źródło