• Tables:

    DECLARE @Customer TABLE

    (

    CustomerID integer PRIMARY KEY

    )

    DECLARE @Address TABLE

    (

    AddressID integer PRIMARY KEY NONCLUSTERED,

    CustomerID integer NOT NULL,

    FromDate date NOT NULL,

    ToDate date NOT NULL,

    UNIQUE CLUSTERED (CustomerID, AddressID)

    )

    DECLARE @Email TABLE

    (

    EmailID int PRIMARY KEY NONCLUSTERED,

    CustomerID integer NOT NULL,

    FromDate date NOT NULL,

    ToDate date NOT NULL,

    UNIQUE CLUSTERED (CustomerID, EmailID)

    )

    Test data:

    INSERT @Customer

    (CustomerID)

    VALUES

    (1)

    INSERT @Address

    (AddressID, CustomerID, FromDate, ToDate)

    VALUES

    (1, 1, '2000-01-01', '2005-12-31'),

    (2, 1, '2006-01-01', '9999-12-31')

    INSERT @Email

    (EmailID, CustomerID, FromDate, ToDate)

    VALUES

    (1, 1, '2000-01-01', '2005-12-31'),

    (2, 1, '2006-01-01', '2011-12-31'),

    (3, 1, '2012-01-01', '9999-12-31')

    Query:

    SELECT

    T1.CustomerID,

    T1.AddressID,

    T1.EmailID,

    T1.FromDate,

    T1.ToDate

    FROM

    (

    SELECT

    c.CustomerID,

    a.AddressID,

    e.EmailID,

    (SELECT MAX(U.FromDate) FROM (VALUES (a.FromDate), (e.FromDate)) AS U (FromDate)) AS FromDate,

    (SELECT MIN(U.ToDate) FROM (VALUES (a.ToDate), (e.ToDate)) AS U (ToDate)) AS ToDate

    FROM @Customer AS c

    LEFT JOIN @Address AS a ON

    a.CustomerID = c.CustomerID

    LEFT JOIN @Email AS e ON

    e.CustomerID = c.CustomerID

    ) AS T1

    WHERE

    T1.FromDate <= T1.ToDate

    Output: