Return Parents With Only One Child
Assuming the primary key of children is (horror) id:

select p.* 

from parents p 
  inner join children c on c.parentId = p.id

where c.firstname like 'tom'
  and not exists
      ( select 1 from children c2
        where c2.parentId = p.id
          and c2.id &lt;&gt; c.id
      ) ;


or using GROUP BY:

select p.* 

from parents p 
  inner join 
    ( select parentid
      from children c 
      group by parentid
      having min(id) = max(id)          -- you could use instead:  count(*)=1  here
         and min(firstname) like 'tom'
    ) c
    on c.parentid = p.id ;