I had one positive consulting relationship. It was a longer-term project. I was the sole consultant and I was able to work closely with my client and explain tradeoffs between short-term deliverables and longer-term technical debt. My client was also instrumental of course and brought a very understanding approach to the table, and was able to understand the technical side of things.
But of course, that is almost never the case. Even with good intentions, that approach never seems to scale up. Not even a little bit.
Some consulting shops do try to bring a similar approach to the table in a scaled-up way. My current employer hired one of the better-known Ruby shops for a long-term engagement.
On the bright side, I would say that the consulting shop did try their best to manage technical debt and bring a good engineering approach. On the flip side, I would say that the end results were decidedly mixed.
Contract-based engineering is nearly always a recipe for technical debt.
The team will nearly always focus on today's problems. Not tomorrow's. Because... why should they? They are judged solely on how well they're solving today's problem. And they likely won't be around in three months or three years to reap the true rewards of reduced technical debt anyway.
Contracted engineers also haven't simply been around your business long enough to truly understand it and anticipate what future needs will even exist.
All other things being roughly equal I'll take a full-time, permanent, offshore engineer over an onshore contractor any day of the week.