Greinke (13-3) racked up his fifth win in five starts, blanking the Cubs until yielding a pair of runs in the ninth. The right-hander ended up allowing five hits and two walks over 8 2/3 innings while striking out nine.
Puig's solo blast in the eighth landed halfway up the pavilion in left field, while the star rookie's trio of hits raised his batting average to .346.
Cubs starter Jake Arrieta (1-1) was reached for four runs on six hits over five full innings.
Brian Bogusevic drove in both of Chicago's runs.