The posted code seem ok, maybe you didn't post the correct table content/schema for us to replicate the issue. Below is an example using the posted data and modify schema to match the query and they all produce the same results. My take is that maybe you didn't post enough information or your SQL query join using wrong column. Is tough to tell because your provided query doesn't match the schema.
DECLARE @user TABLE (
UserID INT,
FirstName VARCHAR(50),
LastName VARCHAR(50)
)
DECLARE @Enquiry TABLE (
EnquiryID INT,
CreatedBy INT
)
DECLARE @Activity TABLE (
ActivityID INT,
CreatedBy INT,
AssignedBy INT NULL,
AssignedTO INT NULL,
EnquiryID INT
)
INSERT INTO @user
SELECT 1,'Joe','Smith' UNION
SELECT 2,'John ','Doe' UNION
SELECT 3,'Robert ','Smith'
INSERT INTO @Enquiry
SELECT 1,1 UNION
SELECT 2,1
INSERT INTO @Activity
SELECT 1,1,NULL,NULL,1 UNION
SELECT 2,1,2,3,2
SELECT a.EnquiryID, cb.FirstName, ab.FirstName, at.FirstName FROM @Activity a
JOIN @user cb ON a.CreatedBy = cb.UserID
LEFT JOIN @user ab ON a.AssignedBy = ab.UserID
LEFT JOIN @user at ON a.AssignedTO = at.UserID
SELECT e.EnquiryID, eu.FirstName 'CreatedBy' ,ab.FirstName 'AssignedBy', at.FirstName 'AssignedTO'
FROM @Enquiry e
JOIN @user eu ON e.CreatedBy = eu.UserID
JOIN @Activity a ON e.EnquiryID = a.EnquiryID
LEFT JOIN @user ab ON a.AssignedBy = ab.UserID
LEFT JOIN @user at ON a.AssignedTO = at.UserID
SELECT DISTINCT E.EnquiryId as Enquiry,U.FirstName as CreatedBY ,U1.FirstName as AssignedBY , U2.FirstName as AssignedTO
FROM @Enquiry E inner join @user U on E.CreatedBy = U.UserID
inner join @Activity A on E.EnquiryId = A.EnquiryID
Left Join @user U1 on A.AssignedBY = U1.UserID
Left Join @user U2 on A.AssignedTO = U2.UserID
EnquiryID FirstName FirstName FirstName
1 Joe NULL NULL
2 Joe John Robert