This was incorrect - if outer_if_first was set, then even non-nullable joins were promoted. The promote_joins() contains logic for this case, so instead use that.