Vejo referências frequentes a WITH
consultas (expressões de tabela comuns ou CTEs) atuando como uma cerca de otimização, onde o servidor não tem permissão para inserir filtros nas consultas CTE, extrair expressões comuns do CTE etc. para ser um comportamento exigido pelos padrões SQL.
Os CTEs são definitivamente uma cerca de otimização no PostgreSQL ... mas isso é exigido pelo padrão ou, na verdade, apenas detalhes de implementação?
Por exemplo, essas postagens da lista de discussão afirmam ou sugerem que é padrão:
Depois de mencioná-lo em um comentário , perguntaram-me onde está especificado - e depois de dar uma olhada no único rascunho do SQL: 2008 ao qual tenho acesso, não estou tendo muita sorte em encontrá-lo.
Ainda não estudei intensivamente o padrão, então espero uma sugestão de alguém que o tenha feito: a delimitação de otimização de CTEs no PostgreSQL é realmente exigida pelo padrão? E se sim, onde está especificado? Ou as declarações na lista de discussão da Pg estão erradas?
Veja também a cerca de otimização de CTE de thread na lista de tarefas? .
Acho que é um detalhe de implementação.
Acho que um implementador poderia avaliar uma expressão de tabela comum 20 vezes, mesmo de 20 maneiras diferentes, e ainda ter uma implementação compatível. A única questão relevante é se "seu efeito... é idêntico ao efeito" da sequência de ações definidas nas Regras Gerais.
[1]. Seção 6.3.3.3, "Ordem de avaliação de regras", em um rascunho do padrão SQL 2008, com o nome de arquivo local 5CD2-01-Framework-2006-01.pdf, p. 41 Não faço ideia de onde o consegui. O Google pode saber.