Desde el manual:
La lista de expresiones de salida después de SELECT
puede estar vacío, produciendo una tabla de resultados de cero columnas. Esta no es una sintaxis válida según el estándar SQL. PostgreSQL le permite ser consistente con permitir tablas de cero columnas. Sin embargo, no se permite una lista vacía cuando DISTINCT
se utiliza.
La posibilidad de tablas de "columna cero" es un efecto secundario de la herencia de tablas si no me equivoco. Hubo discusiones sobre esto en las listas de correo de Postgres (pero no puedo encontrarlas ahora)