В лагере у Святополка Ярослав имел приятеля, к которому послал ночью спросить: "Что делать? Меду мало варено, а дружины много"; тот отвечал, что пусть Ярослав к вечеру отдаст мед дружине; новгородский князь догадался, что ночью должно сделать нападение. Была заморозь; Святополк стоял между двумя озерами и всю ночь пил с дружиною, а Ярослав перед рассветом исполчил свое войско и перевезся на другой берег, причем новгородцы, высадившись из лодок, оттолкнули их от берега, чтоб отнять у себя всякую возможность к побегу; Ярослав приказал дружине повязать головы платками, чтоб в сече узнавать своих. Враги сошлись, была сеча злая; печенеги, стоявшие за озером, не могли помочь Святополку, который был притиснут с своею дружиною к озеру, принужден вступить на лед, лед обломился, и Ярослав одолел. Святополк бежал в Польшу, а Ярослав сел в Киеве на столе отцовском и дедовском, проживя на севере 28 лет. Новгородцы были отпущены домой и оделены щедро: старосты получили по 10 гривен, смерды - по гривне, а горожане все - по 10.
Но Святополк был жив, и потому Ярослав не мог успокоиться. Для Болеслава польского открылись такие же теперь виды на восток, какие он имел прежде на запад; на Руси, как прежде у чехов, семейные раздоры приглашали его к посредничеству и к утверждению своего влияния, тем более, что теперь Болеслав должен был помочь своему зятю. Он воспользовался благоприятным случаем: по его наущению печенеги напали на Киев; под самым городом была злая сеча; едва к вечеру Ярослав мог прогнать варваров. С своей стороны Ярослав выступил к польским границам, заключив союз с врагом Болеславовым, императором Генрихом II; но поход русского князя кончился неудачною осадою Бреста; поход императора против Болеслава также не удался, он принужден был заключить с ним мир и, желая избавиться от опасного врага, обратить его деятельность на восток, сам советовал ему вооружиться против русского князя. В 1017 году Болеслав выступил в поход, усилив свое войско 300 немцев, 500 венгров и 1000 печенегов, и 22 июля достиг берегов Буга, разделявшего польские владения от русских; Ярослав ждал его на другом берегу с русью (жителями Южной Руси), вырягами и славянами (новгородцами). Здесь повторилось то же явление, какое видели на берегах Днепра у Любеча: воевода Ярославов Будый, ездя по берегу, начал смеяться над Болеславом; он кричал ему:"Вот мы тебе проткнем палкою брюхо твое толстое!" Был Болеслав, говорит летопись, велик и тяжел, так что и на коне с трудом мог сидеть, но зато был смышлен. Не вытерпел он насмешки и, обратившись к дружине своей, сказал: "Если вам это ничего, так я один погибну", - сел на коня и бросился в реку, а за ним - и все войско. Полки Ярослава, вовсе не ожидая такого внезапного нападения, не успели приготовиться и обратились в бегство; Ярослав ушел в Новгород только сам-пять; а Болеслав с Святополком почти беспрепятственно вошли в Киев 14 августа. В городе нашли они мачеху, жену и сестер Ярославовых, из которых за одну (Предславу) сватался прежде Болеслав, получил отказ и теперь в отмщение взял ее к себе в наложницы. Часть своего войска он отпустил назад, другую велел развести по русским городам на покорм. Но и в Киеве повторились те же явления, какие мы видели в Праге у чехов, и, как видно, по тем же причинам. Русские вооружились против поляков и стали убивать их; летописец приписывает это приказу Святополка, но очень вероятно известие, что поляки вели себя и на Руси так же, как в Богемии, и возбудили против себя восстание; очень вероятно также, что и Святополк, наскучив неприятным гостем, слишком долго зажившимся в Киеве на его счет, не был против народной мести полякам. Это заставило Болеслава уйти из Киева; пример чешских событий научил его быть осторожнее в подобных обстоятельствах. Половину войска он отослал домой, разосланные по русским городам поляки истреблены, трудно было противиться, если бы вспыхнуло восстание; притом же, вероятно, он слышал уже о новых приготовлениях Ярослава. Но Болеслав ушел не без выгоды: он захватил себе все имущество Ярослава, к которому приставил Анастаса: хитрый грек умел подольститься к каждому сильному и менял отечество, смотря по выгодам; Болеслав ему вверился лестию, говорит летопись. Польский князь повел также с собою бояр Ярославовых, двух сестер его и множество пленников, взятых в бою; на дороге Болеслав захватил и Червенские города, приобретение Владимира Святого; впрочем, вероятно, что эти города были уступлены ему Святополком в награду за помощь.
Между тем Ярослав, явившись в Новгород без войска, хотел бежать за море; но граждане вместе с посадником Константином, сыном Добрыни, рассекли княжеские лодки, приготовленные для бегства, и объявили: "Хотим еще биться с Болеславом и Святополком". Такая решительность понятна: им нечего было теперь ожидать хорошего от Святополка, а защищаться от него без князя было также невыгодно. Они начали сбирать деньги - с простого человека по 4 куны, со старост - по 10 гривен, с бояр - по 18 гривен, привели варягов, дали им эти деньги, и таким образом у Ярослава набралось много войска, и он двинулся против Святополка; тот был разбит, бежал к печенегам и привел огромные толпы их против Ярослава в 1019 году. Ярослав вышел навстречу и сошелся на реке Альте, где был убит Борис. Место благоприятствовало Ярославу по воспоминанию о преступлении Святополка; летописец говорит, что Ярослав молил бога об отмщении новому Каину. Он же говорит, что сеча была злая, какой еще не бывало на Руси, - секлись, схватываясь, руками, трижды сходились биться, по удольям текла кровь ручьями; к вечеру одолел Ярослав, а Святополк бежал в пограничный польский город Брест, где, вероятно, умер от ран, полученных в битве; по скандинавским преданиям, он пал от руки варяга Эймунда, служившего в войске Ярослава, а по русским, - погиб злою смертию в пустыне между Польшею и Богемиею. Ярослав сел в Киеве, утер пот с дружиною, по выражению летописца, показав победу и труд великий.