Vad sägs om något sånt här:
SELECT m.MESSAGEID, sum((case when mp.messageid is not null then 1 else 0 end)) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY m.MESSAGEID;
Funktionen COUNT() kommer att räkna varje rad, även om den har null. Med SUM() och CASE kan du bara räkna icke-nullvärden.
EDIT:En enklare version hämtad från den översta kommentaren:
SELECT m.MESSAGEID, COUNT(mp.MESSAGEID) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY m.MESSAGEID;
Hoppas det hjälper.