SUM answers 'what do these rows add to?' — with no rows there is nothing to add, and SQL returns NULL rather than inventing 0. The damage is downstream: NULL + 500 is NULL, a payroll line vanishes, a chart gaps. COALESCE(SUM(x), 0) is the honest spelling of 'treat absence as zero' — a decision, made visible. COUNT is the exception: it returns 0, because 'how many' always has an answer.
SELECT a.artist, SUM(s.minutes)AS total FROM artists a LEFT JOIN sessions s ON s.artist = a.artist GROUP BY a.artist ORDER BY a.artist;
SELECT a.artist, COALESCE(SUM(s.minutes), 0) AS total FROM artists a LEFT JOIN sessions s ON s.artist = a.artist GROUP BY a.artist ORDER BY a.artist;
The invoice run reads NULL for the new artist instead of 0 minutes — SUM over zero rows returns NULL, and downstream the payroll line blanks out.
Wrap the aggregate in COALESCE(SUM(...), 0), or keep NULL deliberately and let the consumer tell 'no activity' from 'zero'.