They have done the math.
Over the long term, it costs them almost 4-5 times as much to hire a new employee. It takes most new employees 6-12 months to become as productive as their counterparts. Add the cost of recruiting, interviewing, performance management, etc. Giving a raise by far is the cheapest option.
Long term.
But quarterly profits will always, ALWAYS, supercede any long term investments.
Why take the hit in your operating budget NOW when all you care about is making sure you’re hitting next quarter’s numbers? Hell, the employee leaving is going to lower your costs so it’s better for you in time for the shareholders’ meeting.
Their goal is to get employees who get comfortable and will stick around for that 3% raise. Hiring someone new - even at a premium - gives them another shot at getting an employee who won’t demand a big raise later.
As far as they’re concerned, someone who demands a 20% raise today will demand a 20% raise again the same time next year.