A joint between a static and kinematic body makes no sense. Static body doesn't move. Kinematic body moves by manually setting its transform/velocities. A joint gets simulated by the engine to affect the position/velocity of the connected bodies. At least
one of those bodies must be dynamic for the joint to do its work otherwise it just won't do anything and eventually will become unstable i.e. the constraint it represents will be impossible to satisfy.
In other words: by making a RevoluteJoint you tell the engine: "I want these bodies to be pinned at a common anchor but they can rotate relative to each other". The solver says "I'm going to modify the bodies positions so the constraint is
put in practice". Only it can't - because it won't move a static body or a kinematic body.
On the other hand you can have a joint between static and dynamic or kinematic and dynamic just fine because the solver will move the dynamic body around until it's where the joints wants it to be while not having to touch the static or kinematic body
at all. So you can attach a joint to a kinematic body but the other body must be dynamic.