Cain (7-4) held the Indians to four hits and one walk, striking out six for the Giants, who clinched their three-game interleague series against Cleveland.
The Giants right-hander has gone 4-0 in his last five games and lowered his ERA to 3.22.
Javier Lopez tossed a scoreless eighth and Brian Wilson set the Indians down in order in the ninth for his 22nd save.
The Giants got their only run in the seventh. Tejada reached first with one out on second baseman Cord Phelps' throwing error. One out later Phelps made another error, allowing Cain to reach base, and Andres Torres then walked to load the bases.
With Emmanuel Burriss at the plate, Tony Sipp was called for a balk by home plate umpire Bob Davidson, allowing Tejada to score.
Justin Masterson (5-6) took the hard-luck loss for Cleveland, allowing only the one unearned run on four hits through 6 2/3 innings.