You can pretty much do anything you can think of in SQL:set nocount on-- ***************************************************-- ** START: Set up tables and fill with test data-- ***************************************************create table #Members ( MemberID int identity(1,1) not null primary key clustered , Member_Name varchar(20) null)create table #Addresses ( AddressID int identity(1,1) not null primary key clustered , MemberID int not null , Address varchar(100) not null)create table #Emails ( EmailID int identity(1,1) not null primary key clustered , MemberID int not null , Email varchar(100) not null)insert #Members (Member_Name) Values ('Joe User')insert #Addresses (MemberID , Address) Values ( 1 , '123 Main Street')insert #Addresses (MemberID , Address) Values ( 1 , '333 Broadway Road')insert #Addresses (MemberID , Address) Values ( 1 , '9332 Centre Street')insert #Emails (MemberID , Email) Values ( 1 , 'joe@eee.com')insert #Emails (MemberID , Email) Values ( 1 , 'joe@3ewseee.com')insert #Emails (MemberID , Email) Values ( 1 , 'juser@ppoppo.com')insert #Emails (MemberID , Email) Values ( 1 , 'joe.user@abbdn.com')-- ***************************************************-- ** END : Set up tables and fill with test data-- ***************************************************go-- ***************************************************-- ** START: Create SP to return data-- ***************************************************create procedure #GetMemberData @MemberID intASset nocount oncreate table #tempEmails ( RowId int identity(1,1) not null primary key clustered , EmailID int not null)create table #tempAddresses ( RowId int identity(1,1) not null primary key clustered , AddressID int not null)Insert #tempEmails (EmailID) Select EmailID from #Emails where MemberID = @MemberID Order by EmailIDInsert #tempAddresses (AddressID) Select AddressID from #Addresses where MemberID = @MemberID Order by AddressIDselect @MemberID As MemberID , e.EmailID , a.AddressIDfrom #tempEmails efull outer join #tempAddresses aon e.RowID = a.RowIDdrop table #tempEmails, #tempAddressesreturn 0go-- ***************************************************-- ** END : Create SP to return data-- ***************************************************-- Call the SP and get the dataexec #GetMemberData @MemberID = 1-- drop temp tables and procsdrop table #Members , #Addresses , #Emailsdrop procedure #GetMemberData-- here is the output:MemberID EmailID AddressID ----------- ----------- ----------- 1 1 11 2 21 3 31 4 NULL