SQL Query for Internal Messaging System
Why not use this query (sqlfiddle):

SELECT [MessageID]
    , [Body]
    , [Date]
    , [MessageParentID] 
FROM Messages 
WHERE MessageID NOT IN (
        SELECT MessageParentID FROM Messages
    )


Basicaly, if a MessageID is also a MessageParentID it means there is at least 1 reply. Therefore it only looks for message without replies (ie. without MessageParentID).

With this limited sample, it gives the correct output: 

MessageID   Body                            Date                        MessageParentID
1           Its getting hot in hure         December, 27 2015 00:00:00  0 
2           Where is all the chicken?       December, 28 2015 00:00:00  0 
4           Sometimes its a little hotter   January, 05 2016 00:00:00   3 


I don't unsderstand why:


are you using a GROUP BY with all the columns in SELECT. Do you need a DISTINCT?
are you using Max(M.Date) and anyway, it is also included in the group by
you are joining to MessageRecipients since anythin from the recipient list or count are not needed