Ключевое отличие материализованных и не материализованных выражений WITH заключается в способе выполнения запроса. postgrespro.ru unetway.com
Материализованные выражения создают временную копию таблицы, которая хранится в памяти или во временном файле на диске. www.sqlite.org Затем эта таблица используется вместо имени таблицы CTE во всех последующих запросах SQL. www.sqlite.org Благодаря материализации ресурсоёмкая функция вычисляется только один раз для строки таблицы, а не дважды. postgrespro.ru
Не материализованные выражения заменяют оператор SELECT подзапросом при каждом появлении имени таблицы CTE. www.sqlite.org К подзапросу применяются оптимизации, как если бы он использовался косвенно. www.sqlite.org При таком подходе существует риск многократного вычисления запроса WITH, но это может быть выгодно, если в каждом случае использования WITH из всего результата запроса остаётся только небольшая часть. postgrespro.ru
Таким образом, выбор между материализованными и не материализованными выражениями WITH зависит от конкретных требований проекта и целей оптимизации.