Vous pouvez créer une union et utiliser un alias dans la requête pour définir différents mappages de champs pour le même nom, s'il n'y a pas de champ dans une table, vous venez de caster l'alias pour un champ vide :
SELECT (staff.name) as name FROM users
left JOIN staff USING (user_id)
UNION
SELECT (customers.first_name) as name FROM users
left JOIN customers USING (user_id);
Si l'ID utilisateur est un PK/FK, il ne sera renvoyé que par une seule table.