Direto do manual:
A lista de expressões de saída apósSELECT
pode estar vazio, produzindo uma tabela de resultados de coluna zero. Esta não é uma sintaxe válida de acordo com o padrão SQL. O PostgreSQL permite que seja consistente com a permissão de tabelas de coluna zero. No entanto, uma lista vazia não é permitida quandoDISTINCT
é usado.
A possibilidade de tabelas de "coluna zero" é um efeito colateral da herança de tabelas, se não me engano. Houve discussões sobre isso nas listas de discussão do Postgres (mas não consigo encontrá-las agora)