The moment you have to look up the user object, you've lost the primary advantage of JWT, and might as well ditch it.
There are systems where the authorization is done in the JWT too (i.e. scopes/permissions in the token) - in that case you are right.
Now the reasonable response to the above is that this should be happening in a dedicated authn/z concern - and that is correct! But when paranoia is called for, it's not unreasonable to have redundant checks in logic where authz is critical.
DRY conventionally refers to repeated sections of code, not redundant communications.