Cómo seleccionar la primera fila de una unión que devuelve varias filas en la clave primaria

Esto está relacionado con esta pregunta: https://dba.stackexchange.com/questions/103262/joining-multiple-tables-results-in-duplicate-rows/103264

Tengo dos tablas que estoy uniendo. Comparten una clave. La tabla persona tiene un nombre por clave primaria pero la tabla email tiene múltiples emails por personId. Quiero mostrar sólo el primer correo electrónico por persona. Actualmente obtengo varias filas por persona porque tienen varios correos electrónicos. Estoy ejecutando SQL-Server 2005.

EDIT: Esto es T-SQL. Primer correo electrónico es, literalmente, la primera fila de correo electrónico por persona.

EDITAR 2: Primer correo electrónico como yo lo veo sería la primera fila de correo electrónico que aparece en la unión como SQL trabaja a través de la consulta. No importa que email aparezca. Sólo que no aparezca más de un correo electrónico. Espero que quede más claro.

Table1: Person
Table2: Email

Select Person.PersonName, Email.Email
From person 
left join on Person.ID=Email.PersonId;
Solución
SELECT
    A.PersonName, A.Email
FROM
        (
        Select Person.PersonName, Email.Email
            ,ROW_NUMBER() OVER(PARTITION BY Person.ID ORDER BY Email.Email) AS RN
        From person 
        left join Email on Person.ID=Email.PersonId
        ) A
WHERE A.RN = 1
Comentarios (4)

Yo utilizaría un aplique exterior para esto, me parece más legible.

Select Person.PersonName, coalesce(Email.Email,'No email found.') as Email
From person 
outer apply (
  select top(1) Email.Email 
  from Email 
  where Person.ID=Email.PersonId
  order by 
) as Email;
Comentarios (0)
select
  P.PersonID,
  (SELECT TOP 1 E.Email FROM Email E WHERE E.PersonID = P.PersonID ORDER BY )
from
  Person P
Comentarios (3)