Q:

SQL MAX Command still returning more one result

I had this SQL Query working perfectly.   I made a few small changes to the database, and reran it and it simply stopped work. 
My goal here is to join master_followups with followups_fb_messages.message_text but only return a single row for each UID in master_followups with the most RECENT followups_fb_messages.message_text joined to it. 
SELECT master_followups.*,  
  followups_fb_messages.message_text, 
  followups_fb_messages.message_time 
FROM
  master_followups 
  LEFT JOIN followups_fb_messages 
    ON master_followups. UID = followups_fb_messages. FID 
    AND followups_fb_messages.message_time = 
      (SELECT
        MAX(followups_fb_messages.message_time) 
        FROM followups_fb_messages 
        WHERE  followups_fb_messages. FID = master_followups. UID
      )

I've been trying to figure out what happened for the last hour.  
Instead of returning 100 results as expected, this is returning 340.    I checked the database and it shows 100 rows in master_followups and 340 rows in followups_fb_messages.  
I had this exact query working fine about an hour ago, then it stopped.   Maybe I changed something, but I can't see it. 

A:

Let's use some TDQD — Test-Driven Query Design. 
Time of most recent follow-up message for each ID
SELECT FID, MAX(message_time) AS MostRecent
  FROM followups_fb_messages
 GROUP BY FID

Most Recent Follow-up Message Information for each ID
SELECT a.*
  FROM followups_fb_messages AS a
  JOIN (SELECT FID, MAX(message_time) AS MostRecent
          FROM followups_fb_messages
         GROUP BY FID
       ) AS b ON a.FID = b.FID AND a.message_time = b.MostRecent

Note that this is a regular inner join, not an OUTER join. 
Master Follow-up Information and Follow-up Message Information
SELECT m.*, f.message_text
  FROM master_followups AS m
  LEFT JOIN
       (SELECT a.FID, a.message_text
          FROM followups_fb_messages AS a
          JOIN (SELECT FID, MAX(message_time) AS MostRecent
                  FROM followups_fb_messages
                 GROUP BY FID
               ) AS b ON a.FID = b.FID AND a.message_time = b.MostRecent
       ) AS f ON f.FID = m.UID

