If operator ID and badge ID are unique in the Operator table (ie it is a 1:1 mapping of operator ID to badge ID), then that isn't going to be the problem with duplicates. Your problem then is on the MAIN table which can be confirmed by finding a duplicate value and doing a SELECT COUNT(1) FROM tblMain WHERE badgeID = <duplicate badgeID> (replacing <duplicate badgeID> with the duplicate you are seeing).
So switching it over to using the PK that you have on the Operator table is just going to make better use of the index (so I DO recommend like Phil did that you correct that)..
As for the error you are getting, your ORDER BY column must appear in the SELECT list if you are using a SELECT DISTINCT. There are ways around this, such as nested SELECTs or CTE's. It really depends on your use case though. Do you need your data sorted by a column that isn't being presented to the end user? If not, leave out the ORDER BY. If you DO need it sorted by that column AND you are not planning on presenting it to the end user, then rewrite the query to something like:
SELECT DISTINCT *
<your current query here without the DISTINCT>
) AS MainOperator