Какво ще кажете за нещо подобно:
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;
Функцията COUNT() ще брои всеки ред, дори ако има нула. Използвайки SUM() и CASE, можете да преброите само стойности, различни от нула.
РЕДАКТИРАНЕ:По-опростена версия, взета от горния коментар:
SELECT m.MESSAGEID, COUNT(mp.MESSAGEID) FROM MESSAGE m
LEFT JOIN MESSAGEPART mp ON mp.MESSAGEID = m.MESSAGEID
GROUP BY m.MESSAGEID;
Надявам се това да помогне.