To achieve your goal you need to use STUFF() and GROUP BY
SELECT q.Question + ';' +
STUFF((SELECT ';' + Answer
FROM Answers
WHERE Question_Id = q.Question_Id
ORDER BY 1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),1,1,'') result
FROM Questions q LEFT JOIN Answers a
ON q.Question_Id = a.Question_Id
GROUP BY q.Question_Id, q.Question
Sample output:
| RESULT |
-----------------------------------------------
| Can You Repeat The Question;Maybe;No;Yes |
| Can You Really Repeat The Question;Sure;Yes |
Here is SQLFiddle demo
If there is a possibility of having questions without answers being assigned yet and you want to properly show them you may use ISNULL() or COALESCE() (e.g. to inject a default value)
SELECT q.Question + ';' +
ISNULL(STUFF((SELECT ';' + Answer
FROM Answers
WHERE Question_Id = q.Question_Id
ORDER BY 1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),1,1,''),
'[Sorry, no answers yet]') result
FROM Questions q LEFT JOIN Answers a
ON q.Question_Id = a.Question_Id
GROUP BY q.Question_Id, q.Question
Sample output:
| RESULT |
----------------------------------------------------------
| Can You Repeat The Question;Maybe;No;Yes |
| Can You Really Repeat The Question;Sure;Yes |
| Can a question have no answers;[Sorry, no answers yet] |
Here is SQLFiddle demo