Not sure why you're using MERGE for this. This would normally just be an update with a join, but it is complicated because of the aggregate (I hope that receivedData is part of some ETL process and not permanent data; if it is the latter then you're just storing redundant data for no clear reason).
With transactional control and error handling set aside:
;WITH x AS
(
SELECT empName, c = COUNT(SaleID) FROM dbo.receivedData
)
UPDATE md SET numberOfSales = x.c
FROM dbo.masterdata AS md
INNER JOIN x
ON x.empName = md.empName;
INSERT dbo.masterdata(empName, NumberOfSales)
SELECT empName, COUNT(SaleID)
FROM dbo.receivedData AS r
WHERE NOT EXISTS (SELECT 1 FROM dbo.masterdata
WHERE empName = r.empName)
GROUP BY empName;
MERGE may look like an easier way to solve this problem (though your question didn't talk about non-matches at all), but as I point out in this article, there are much bigger problems you need to be wary of.
See another more detailed answer that talks about this alternative to MERGE for this use case:
Also please always use schema names in all object references.
Also, be very careful about case - either your names are sloppy (masterdata vs. receivedData) or your code is, and this can lead to problems too.