Que tal algo como isso:
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;
A função COUNT() contará cada linha, mesmo se tiver null. Usando SUM() e CASE, você pode contar apenas valores não nulos.
EDIT:Uma versão mais simples retirada do comentário principal:
SELECT m.MESSAGEID, COUNT(mp.MESSAGEID) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY m.MESSAGEID;
Espero que ajude.