Разница между материализацией и не материализацией подзапросов WITH в PostgreSQL заключается в том, как оптимизатор обрабатывает их. 4
При материализации подзапрос вычисляется отдельно от родительского запроса, что может быть полезно, если подзапрос содержит ресурсозатратные вычисления. 4 По умолчанию материализуются подзапросы из рекурсивных запросов CTE и те, на которые ссылаются более одного раза. 4
При не материализации подзапрос объединяется с родительским запросом, что может быть эффективнее, если каждое использование подзапроса требует только небольшой части полного вывода. 23 Однако в этом случае возникает риск многократного вычисления подзапроса. 2
Для принудительного выбора между этими вариантами можно использовать модификатор MATERIALIZED для материализации и NOT MATERIALIZED для не материализации. 14