Почему в PostgreSQL (и, возможно, других движках) оператор UNION считает значения NULL одинаковыми, а ограничение UNIQUE - нет?

Я понимаю, что стандарт SQL допускает несколько значений NULL в столбце, который является частью ограничения UNIQUE.

Что Я не понимаю, почему конструкция UNION (по крайней мере, в PostgreSQL) обрабатывает значения NULL как одно и то же. Например:

$ select * from tmp_a;
 a | b
---+---
 a | b
 a |
   |
(3 rows)

$ select * from tmp_b;
 a | b
---+---
 a | c
 a |
   |
(3 rows)

$ select a, b from tmp_a union select a, b from tmp_b order by 1, 2;
 a | b
---+---
 a | b
 a | c
 a |
   |
(4 rows)
5
задан Shankster 20 April 2011 в 02:50
поделиться