One way nullable columns are often used is like an option type. It's easy to see that you might want rows to be unique if they have Some(value) but have multiple rows where the column is None
But yes, even if no nulls are present in any table, outer join could (or maybe even should) introduce them.