UNION removes duplicate rows across the two inputs and pays a sort or hash to do it; UNION ALL keeps every row and skips that work. When each input row is a real event, dropping duplicates undercounts.
SELECT email FROM promo UNION SELECT email FROM newsletter ORDER BY email;
SELECT email FROM promo UNION ALL SELECT email FROM newsletter ORDER BY email;
The 'total emails to send' count reads 3, not 4 — UNION silently merged the address that was on both lists.
Use UNION ALL when the rows are distinct events you want to keep; reach for UNION only when you actually want the duplicates removed.
SELECT ... UNION ALL SELECT ...