Two tickets for one request is nearly always mail routing rather than anything in the helpdesk. Work through these in order.
The most common cause. Your mailbox forwards to the portal, and the portal's own replies arrive back in that same mailbox, which forwards them again. Each round trip can create another ticket. Forward along one path only, and make sure the portal is not sending to an address that feeds back into it.
A mailbox can easily end up with both a transport rule and a user-level forward pointing at the portal, often added by different people months apart. Review every rule on the mailbox and keep exactly one.
Someone emails your support address and then, hearing nothing for an hour, fills in the web form as well. Both are legitimate arrivals, so the system creates both. An automatic acknowledgement on the email channel reduces this a lot, because the customer knows the first one landed.
Replies attach to an existing ticket by matching the thread. If the customer answers from a second address, or their mail client strips the reference, the reply looks like a new request and opens its own ticket.
An out-of-office or a bot at the customer's end can answer your acknowledgement, which arrives as fresh mail. If duplicates always come from the same company, look here first.
Open the ticket you want to keep, then More > Merge, search for the duplicate and confirm. Replies and notes are combined into the primary ticket, attachments are preserved, the secondary ticket is closed and marked as merged, and the primary keeps its assignee, status and SLA.
A merge cannot be undone. Check you have the right primary ticket before you confirm - it is the one that survives.