Некоторое время назад Брент Озар опубликовал статью, в которой подробно описываются некоторые различия между SQL Server и PostgreSQL:
Два важных различия между SQL Server и PostgreSQL
Первый момент («CTE - это заборы для оптимизации») попался на глаза, поскольку очевидно, что в представленном примере SQL Server объединяет CTE и основной запрос и оптимизирует его как один запрос (в отличие от противоположного поведения в PostgreSQL).
Однако такое поведение кажется противоречащим примерам, которые я видел в других блогах и учебных классах, где SQL Server рассматривает CTE как барьер оптимизации, который позволяет лучше использовать индексы, повысить производительность и т. Д. Например:
Таким образом, кажется, что SQL Server «чтит» CTE как забор оптимизации ИНОГДА. Существуют ли какие-либо полезные ресурсы, которые документируют конкретный список известных случаев, когда SQL Server надежно соблюдает CTE как забор для оптимизации (или наоборот)?
источник