Isso é um mal-entendido.
O
UNIQUE
restrição faz exatamente o que você quer. Vários NULL
valores podem coexistir em uma coluna definida UNIQUE
. O manual:
Em geral, uma restrição exclusiva é violada quando há mais de uma linha na tabela onde os valores de todas as colunas incluídas na restrição são iguais. No entanto, dois valores nulos não são considerados iguais nesta comparação. Isso significa que mesmo na presença de uma restrição exclusiva, é possível armazenar linhas duplicadas que contêm um valor nulo em pelo menos uma das colunas restritas. Esse comportamento está de acordo com o padrão SQL, mas ouvimos dizer que outros bancos de dados SQL podem não seguir essa regra. Portanto, tenha cuidado ao desenvolver aplicativos destinados a serem portáteis.
Minha ênfase em negrito.
Esteja ciente de que os tipos de caracteres permitem uma string vazia (
''
), que não um NULL
value e acionaria uma violação exclusiva como qualquer outro valor não nulo quando inserido em mais de uma linha.