It totally depends on the scenario and your workflow preferences, but a general rule of thumb that most believe to be good practice is “if the objects come apart in real life (even if you need a screwdriver), they should be separate objects.” Of course by this rule, meshes shouldn’t intersect and if they do they should be the same object, but that’s not always practical or necessary. I’d say if the intersection is visible, make it a single mesh with no intersection. If the intersection is not visible and never will be, the meshes should be separate objects. You should avoid intersections wherever possible and definitely wherever it can be seen by the camera, just because it’s physically impossible and looks unnatural.