Hago este tipo de consulta de manera diferente, con una unión de exclusión en lugar de una subconsulta. Desea encontrar las filas de B que tienen el tiempo máximo para una identificación determinada; es decir, donde ninguna otra fila tiene mayor Tiempo y el mismo ID.
SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
LEFT OUTER JOIN B AS B2 ON B.ID = B2.ID AND B.Time < B2.Time
WHERE B2.ID IS NULL
También puede usar una tabla derivada , que debería funcionar mejor que usar una subconsulta correlacionada.
SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
JOIN (SELECT ID, MAX(Time) AS Time FROM B GROUP BY ID) AS B2
ON (B.ID, B.Time) = (B2.ID, B2.Time)
P.D.:he añadido el greatest-n-per-group
etiqueta. Este tipo de pregunta de SQL aparece todas las semanas en Stack Overflow, por lo que puede seguir esa etiqueta para ver docenas de preguntas similares y sus respuestas.