Нещодавно Брент Озар опублікував публікацію, в якій детально описував деякі відмінності між SQL Server і PostgreSQL:
Дві важливі відмінності між SQL Server і PostgreSQL
Перший момент ("CTE - це огорожі для оптимізації") привернув мене до уваги, тому що очевидно, що в наведеному прикладі SQL Server поєднує CTE та основний запит разом і оптимізує його як єдиний запит (на відміну від протилежної поведінки в PostgreSQL).
Однак така поведінка здається суперечкою прикладів, які я бачив в інших блогах та навчальних класах, де SQL Server розглядає CTE як огорожу оптимізації, що дозволяє краще використовувати індекси, кращу продуктивність тощо. Наприклад:
Отже, схоже, що SQL Server «шанує» CTE як огорожу для оптимізації SOMETIMES. Чи є якісь хороші ресурси, які задокументують конкретний перелік відомих випадків, коли SQL Server надійно вшановує CTE як оптимізаційну огорожу (або протилежну поведінку)?