La construcción UNION es algo diferente en cuanto que es más posible el que haya tipos distintos en un resultado.
Evaluación de UNION
Comprueba si los tipos son indenticos para todos los resultados.
Convierte cada resultado de la clausula UNION para ajustarlo al tipo de la primera clausula SELECT o de la columna de resultado.
tgl=> SELECT text 'a' AS "Text" UNION SELECT 'b'; Text ---- a b (2 rows)
tgl=> SELECT 1.2 AS Float8 UNION SELECT 1;
Float8
------
1
1.2
(2 rows)Los tipos del UNION son forzados a ajustarse a los tipos de la primera clausula en el UNION:
tgl=> SELECT 1 AS "All integers"
tgl-> UNION SELECT '2.2'::float4
tgl-> UNION SELECT 3.3;
All integers
------------
1
2
3
(3 rows)Una estrategia alternativa del analizador podría ser escoger el "mejor" tipo del grupo, pero esto es más dificil debido a la técnica recursiva usada en el analizador. De cualquier modo, se usa el "mejor" tipo cuando hacemos una selección dentro de una tabla:
tgl=> CREATE TABLE ff (f float);
CREATE
tgl=> INSERT INTO ff
tgl-> SELECT 1
tgl-> UNION SELECT '2.2'::float4
tgl-> UNION SELECT 3.3;
INSERT 0 3
tgl=> SELECT f AS "Floating point" from ff;
Floating point
----------------
1
2.20000004768372
3.3
(3 rows)