Они различаются из-за того, где находится ваше левое соединение в утверждении. Помните, что объединения - это не только две таблицы, с которыми вы сравниваете поля, но и все, что вы соединяли до этой точки и следующей таблицы.
Итак, в первом утверждении вы отфильтровываете строки из foo при первом соединении (те, у которых нет bar_id = bar.id)
но во втором утверждении вы включаете все foo в левое соединение.
Это было сложнее сформулировать, чем я ожидал, когда начал писать, дайте мне знать, если это имеет смысл для вас.