For some reason, when i use CTRL + J on my model selecting first the helmet (which is mirrored) and then the rest of the other parts of my model (which some of them are mirrored too), the result is my model being together yes, but also having a duplicate inside of it as well as the images below show. The first is before CTRL + J, the second is the result.
When you join objects, the modifiers on the active object (the last selected before joining) are kept as is, and the modifiers of all the other objects are ignored. If your joined all your character's parts into the one object with a mirror modifier, then the final object will still have the mirror modifier and will therefore mirror the whole object.
To avoid duplicated mesh, either delete half of your character before joining so that the mirror does what you intend, or apply the mirror modifier before joining the object.