I have two tables apps and builds 
apps
app_guid name state created_at updated_at foundation
builds
guid app_guid app_name state created_at updated_at foundation
One app can have multiple builds, but I want to return only most recently updated row of builds.
SELECT 
    a.name as AppName,
    a.state as AppState,
    a.created_at as AppCreatedAt,
    a.updated_at as AppUpdatedAt,
    a.foundation as AppFoundation,
    b.state as BuildState,
    b.created_by_email,
    b.created_by_name
FROM
    apps as a
JOIN
    builds as b ON a.app_guid = (SELECT TOP 1 
                                     b.state as BuildState,
                                     b.created_by_email,
                                     b.created_by_name
                                 FROM
                                     builds AS b
                                 WHERE
                                     b.app_guid = a.app_guid
                                 ORDER BY 
                                     b.updated_at DESC)
WHERE 
    b.state != 'FAILED' 
    AND a.foundation = 2 
    AND a.deleted_at IS NULL 
ORDER BY 
    a.updated_at DESC
This query is not returning anything.
Advertisement
Answer
Use CROSS APPLY:
SELECT . . .
FROM apps a CROSS APPLY
     (SELECT TOP (1) b.*
      FROM builds b
      WHERE a.app_guid = b.app_guid
      ORDER BY b.updated_at DESC
     ) b
WHERE . . .