- Lautaro Martínez (4', 40')
- Robin Gosens (82')
- Don't have ESPN? Get instant access
The first game was goalless but Inter scored after just four minutes in the return when Martinez, starting ahead of Edin Dzeko, smartly turned in Matteo Darmian's cross at the near post for his second goal in as many games.
Milan almost levelled before the half-hour through Rafael Leao but the Portuguese was denied by an excellent reflex save from Samir Handanovic. The Slovenian made another smart stop minutes later to keep out Alexis Saelemaekers.
The Rossoneri were left to rue those missed chances as Inter doubled their lead five minutes before the interval when Martinez netted again, slotting the ball home after being played in by his Argentine compatriot Joaquin Correa.
"I am happy because we are playing another final," said Martinez, who has endured a difficult season. "There are things said that I don't like, but I defend this jersey. The club put a lot of faith in me and I try to repay them on the pitch."
Milan had several half-chances after the break but Ismael Bennacer's 68th-minute strike was ruled out for an offside before substitute Robin Gosens sealed the win for Inter as they edged towards a first Coppa Italia title in more than a decade.
"We wanted to win, we didn't achieve that, we were certainly up against a strong opponent," said Milan boss Stefano Pioli.
"I don't think the performance was worthy of a 3-0 but Inter scored at the right times. Naturally going 2-1 down would have created a different match and given us more momentum... we didn't lack for effort, intensity or chances but it wasn't our night."
- Maurizio Mariani