Будет ли CTE материализован, если он используется только один раз для JOIN с итоговым результатом?
Не обязательно. В PostgreSQL 12+ простой нерекурсивный CTE без побочных эффектов при одном использовании обычно встраивается в основной запрос.
Читать ответ