Why does BooleanUnion produce a single closed non-manifold polysurface with a non-manifold edge, and the equivalent Trim then Join proceedure produces a single closed polysurface with no non-manifold edges. The individual surfaces in the two results are exactly the same geometrically. The mass/volume properties are identical.
Start with three closed polysurfaces with coincident faces and two of the polysurfaces have coincident edges.
Trim the polysurfaces with each other
Join the trimmed polysurfaces
Result is a single closed polysurface wiith no non-manifold edges.
Start with three closed polysurfaces with coincident faces and two of the polysurfaces have coincident edges.
BooleanUnion the polysurfaces
Result is a single closed non-manifold polysurface wiith one non-manifold edge.
When you trim the objects with each other, you are left with three open polysurfaces, each with naked edges that match. When you join, Rhino sees just two edges at each join, so it joins all up nicely, no naked edges,
When you run BooleanUnion, the first thing Rhino does is calculate the intersection between all the objects. This will include the edge touch between the two upper boxes - something that the first procedure does not consider. Then it tries to trim and join the parts, but it doesn’t know what to do with the touching edge, as it can’t join them. So it detects a non-manifold condition.
@Helvetosaur is correct. Join is only looking at the naked edges while the boolean considers everything. I don’t think there’s any inconsistency here as the processes are similar but not the same. Is it causing you some issue with your work?
You seem to be excusing the behavior of booleans by saying it not only joins naked edges it also joins non-naked edges. To me it sounds like your saying booleans do not only what is useful they also do what is not useful - they do everything.
There have been several discussions on the problems the non-manifold result causes. I haven’t been following closely but it seems to cause problems creating meshes for both rendering and 3d printing.
Mostly I think the problems that it creates for users boils down to the fact that Rhino cannot function properly with non-manifold objects. That is pretty much the definition of a BadObject in Rhino, but this is not the only thing that meets that definition but Rhino fails to recognize as a BadObject.
One problem the non-manifold version causes is that Rhino needs to be able to figure out what is inside and what is outside a closed object. So one consequence of the non-manifold result in David’s boolean is that if the user tries to do another boolean with the non-manifold object that boolean may fail or produce garbage if Rhino can’t figure out what is inside and what is outside.