Why the anti-pattern is tempting
The "compress two ids into one claim" approach has surface appeal. Every claim takes a few bytes, and JWT size matters when tokens go in headers. Conflating sub with the tenant feels like a way to save space and avoid adding a claim.
In practice, the savings are negligible (tokens are typically already 500–2000 bytes; one extra claim adds ~30) and the costs are real. Tooling that consumes JWTs — Sentry user binding, audit logs, analytics — all expect `sub` to be the user. Splitting it across tenants makes everything downstream more complex.