Paul White's answer is excellent for SQL 2016, onwards. In prior versions a good way to get around this would be to have a separate, child table to contain the unique, but optional column. The tables would be in an optional 1:1 relationship (i.e. 1:0-1). The child table would look like so: create table tfns ( employee_id int not null primary key, tfn char(9) not null unique, foreign key tfns__employee (employee_id) references employees (id) ); You could also define a view which outer joins `tfns` to `employees` in order to show all of the columns of both tables together.