Del tutorial de sql de Claudio Casares (http://personal.lobocom.es/claudio/sql008.htm) : "... Full Join ... Este tipo de operador se utiliza para devolver todas las filas de una combinación tengan o no correspondencia. Es el equivalente a la utilización de LEFT JOIN y RIGHT JOIN a la misma vez ..."
Lamentablemente no disponemos de este operador en Access. Sin embargo, podemos emular su comportamiento :
-- Supongamos una tabla Autores ...
Create Table Autores (Id Int Primary Key, Nombre Text (255));
Insert Into Autores Values (1, "Ludwig Van Beethoven");
Insert Into Autores Values (2, "Wolfgang Amadeus Mozart");
Insert Into Autores Values (3, "Richard Strauss");
Insert Into Autores Values (4, "Gioachino Rossini");
Insert Into Autores Values (5, "Arrigo Boito");
-- Y una tabla de Operas ...Create Table Operas (Id Int Primary Key, Título text (255), Autor Int);
Insert Into Operas Values (1, "Fidelio", 1);
Insert Into Operas Values (2, "La flauta mágica", 2);
Insert Into Operas Values (3, "El Barbero de Sevilla", 4);
Insert Into Operas Values (4, "Mefistofele", 5);
Insert Into Operas Values (5, "La Fuerza del destino", 6);
-- Y queremos mostrar en una consulta el nombre de la
-- ópera junto con el de su autor. En caso de que falte
-- algún dato, que aparezca el campo con valor nulo,
-- pero en cualquier caso que no omita el registro.
-- Cabe destacar, que realizando un Cross Join, no
-- solucionamos el problema, pues este tipo de
-- combinación omite siempre los valores nulos.
SELECT Autores.Nombre As Autor, Operas.Título
FROM
(
(
Select Id As Autor From Autores
Union
Select Autor From Operas
) AS T LEFT JOIN Operas
ON T.Autor = Operas.Autor
) LEFT JOIN Autores
ON T.Autor = Autores.Id;
-- Se trata por tanto de crear una consulta de unión
-- intermedia, que contenga todos los valores posibles
-- de ambas tablas, y armar la consulta final en base
-- a ella.
Drop Table Autores;
Drop Table Operas;
Ramon Poch. Terrassa a 04/06/2008