Que diriez-vous de quelque chose comme ça :
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;
La fonction COUNT() comptera chaque ligne, même si elle a la valeur null. En utilisant SUM() et CASE, vous ne pouvez compter que les valeurs non nulles.
EDIT :Une version plus simple tirée du commentaire du haut :
SELECT m.MESSAGEID, COUNT(mp.MESSAGEID) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY m.MESSAGEID;
J'espère que ça aide.