Constraint UNIQUE vs Índice UNIQUE INDEX
Unique Index é um tipo de índice que você pode criar em uma tabela. Ele é um índice e uma constraint unique ao mesmo tempo.
O Unique Index impede a inserção de elementos duplicados na tabela e, ao mesmo tempo, cria um índice para aquele elemento.
Apesar de ser uma constraint, ele é criado como um índice, é exibido como índice e não aparece na lista de constraints da tabela.
Quais as diferenças entre a CONSTRAINT UNIQUE e o UNIQUE INDEX?
Não há, toda vez que uma CONSTRAINT UNIQUE é criada, um índice é criado implicitamente para aquela(s) coluna(s).
Da mesma forma, toda vez que um UNIQUE INDEX é criado, uma constraint é criada implicitamente para aquela(s) coluna(s).
Não crie uma CONSTRAINT UNIQUE e um UNIQUE INDEX iguais. Dois índices (duplicados) ficarão na sua tabela, reduzindo sua performance.
UNIQUE INDEX e valores NULL (nulos)
O UNIQUE INDEX permite valores nulos na coluna a ser indexada. Isso faz contraste à PRIMARY KEY, onde é UNIQUE, mas não permite valores nulos.
Referências
https://stackoverflow.com/a/2916464/2789895
https://www.postgresql.org/docs/current/static/sql-createindex.html