En este articulo veremos como hacer uniones de tablas con CROSS JOIN en PostgreSQL. Puedes leer otros artículos para aprender más sobre las uniones u otros articulo para aprender a utilizar INNER JOIN, LEFT JOIN, RIGHT JOIN y FULL JOIN.
Al mostrar columnas de varias tablas, en el caso de que exista la misma columna en varias tablas dará error. Siempre se aconseja utilizar alias de tablas para evitar este problema.
Modelo utilizado
Al final del articulo puedes encontrar el script completo para crear las tablas utilizadas en este ejemplo. Para poder comprender el funcionamiento es necesario que visualices el modelo que esta construido en la base de datos. Tenemos dos tablas, departamentos y empleados, las cuales la única relación posible que tienen entre ellas es la columna id_departamento.

Cross Join
La cuarta cláusula es la llamada cross join o según su traducción literal, union cruzada. Este tipo de uniones nos cruzara todo con todo ya que no se establece un campo de union entre las tablas y no es nada recomendable utilizarla por motivos de duplicidad y bajo rendimiento.

Sintaxis
La sintaxis para unir tablas con cross join es la siguiente:
SELECT tabla1.columna1, tabla1.columnaN, tabla2.columna1, tabla2.columnaN FROM nombreTabla1 tabla1 CROSS JOIN nombreTabla2 tabla2;
Ejemplo
Si queremos mostrar todas las combinaciones posibles entre dos tablas utilizaríamos la siguiente sintaxis:
select e.nombre, d.nombre from empleados e cross join departamentos d;
Si ejecutamos la consulta comprobamos como nos muestra todas las combinaciones de datos:

Ejemplo completo
Copia y pega el siguiente código en tu consola de PostgreSQL y realiza paso a paso leyendo los comentarios.
--MiguelTroyano.com -- Borramos las tablas si existen drop table if exists empleados; drop table if exists departamentos; -- Creamos las tablas create table empleados ( id_empleado numeric(2,0) primary key, id_departamento numeric(2,0), nombre character varying(50), puesto character varying(50), fecha_alta date, sueldo integer ); create table departamentos ( id_departamento numeric(2,0) primary key, nombre character varying(50), edificio character varying(50), planta numeric(2,0) ); -- Insertamos valores insert into empleados values (1,2,'Miguel Troyano','Analista',TO_DATE( '26/09/1986', 'DD/MM/YYYY'),60000), (2,2,'Ismael Troyano','Analista',TO_DATE( '01/01/2001', 'DD/MM/YYYY'),60000), (3,3,'Jose Troyano','Alta Dirección',TO_DATE( '01/01/2001', 'DD/MM/YYYY'),80000), (4,5,'Pilar Redondo','Alta Dirección',TO_DATE( '02/02/2002', 'DD/MM/YYYY'),80000); insert into departamentos values (1,'Mantenimiento','Edificio 1',7), (2,'Inteligencia de negocio','Edificio 2',7), (3,'Recursos Humanos','Edificio 3',8), (4,'Finanzas','Edificio 3',8); -- Mostramos todas las combinaciones posibles -- entre las dos tablas select e.nombre, d.nombre from empleados e cross join departamentos d;