Eu faço esse tipo de consulta de forma diferente, com uma junção de exclusão em vez de uma subconsulta. Você deseja encontrar as linhas de B que têm o tempo máximo para um determinado ID; em outras palavras, onde nenhuma outra linha tem um Time maior e o mesmo 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
Você também pode usar uma tabela derivada , que deve ter um desempenho melhor do que usar uma 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.S.:adicionei o
greatest-n-per-group
marcação. Esse tipo de pergunta SQL surge toda semana no Stack Overflow, então você pode seguir essa tag para ver dezenas de perguntas semelhantes e suas respostas.