What is the difference between an inner join, a left join, and a full outer join in terms of performance on large datasets?