I've seen both, but more often than not most of us seem to be kicking off a full modeling job (often dbt or Dataform) and handling any joins there as part of the model itself. I've also seen simple scheduled queries, Spark pipelines, you name it.
Another emerging pattern are things like incrementally updated Materialized Views in platforms like BigQuery that sometimes allow you to efficiently handle those joins without having to actually duplicate the full data. But most of that gets very warehouse-specific fast.
My general rule of thumb is to try and strike the balance between speed, maintainability, and reliability. We're already doing complex modeling, so it makes more sense for me to do it there 9 times out of 10. But if I was just pulling over a simple join-like enrichment, I'd be fine with your method.