As construções UNION do SQL podem precisar fazer tipos possivelmente não similares se tornarem um único conjunto de resultados. O algoritmo de resolução é aplicado separadamente a cada coluna de saída da consulta união. As construções INTERSECT e EXCEPT resolvem tipos não similares do mesmo modo que UNION. A construção CASE também utiliza um algoritmo idêntico para fazer corresponder suas expressões componentes e selecionar o tipo de dado do resultado.
Determinação do tipo em UNION e CASE
Se todas as entradas forem do tipo unknown, resolve como sendo do tipo text (o tipo preferido para a categoria cadeia de caracteres). Senão, ignorar as entradas unknown ao escolher o tipo.
Se as entradas não desconhecidas não são todas da mesma categoria de tipo, falhar.
Escolher o tipo da primeira entrada não desconhecida que for o tipo preferido nesta categoria, ou que permita todas as entradas não desconhecidas serem implicitamente transformadas neste.
Transformar todas as entradas no tipo selecionado.
Exemplo 7-7. Tipos subespecificados em uma união
tgl=> SELECT text 'a' AS "Text" UNION SELECT 'b'; Text ------ a b (2 rows)
Neste caso, o literal de tipo desconhecido 'b' é resolvido como o tipo text.
Exemplo 7-8. Conversão de tipo em uma união simples
tgl=> SELECT 1.2 AS "Numeric" UNION SELECT 1; Numeric --------- 1 1.2 (2 rows)
O literal 1.2 é do tipo numeric, e o valor inteiro 1 pode ser transformado implicitamente em numeric, portanto este tipo é utilizado.
Exemplo 7-9. Conversão de tipo em uma união transposta
tgl=> SELECT 1 AS "Real" tgl-> UNION SELECT CAST('2.2' AS REAL); Real ------ 1 2.2 (2 rows)
Aqui, porque o tipo real não pode ser implicitamente transformado em integer, mas o integer pode ser implicitamente transformado em real, o tipo do resultado da união é resolvido como real.