Ваш код будет возвращать столбец, где в каждой строке будет адрес электронной почты с запятой перед ним. Если это то, что вы хотите, то да, это будет работать.
Если, наоборот, вы хотите одну строку, в которой будут перечислены все адреса электронной почты, разделенные запятыми, это будет
query = "declare @foo varchar(max);"
query = query & "select distinct @foo = isnull(@foo,'') + emailaddress1 + ', ' from contact;"
query = query & "select left(@foo, len(@foo)-2);"