После того как новгородцы решились выступить в поход, Ярослав собрал оставшихся у него варягов, по одним известиям - тысячу, по другим - шесть тысяч, да новгородцев 40000, и пошел на Святополка, призвавши имя божие; он говорил: "Не я начал избивать братьев, но Святополк; да будет бог отместник крови братьев моих, потому что без вины пролита кровь праведных Бориса и Глеба; пожалуй, и со мной тоже сделает". Мы слышим здесь те же самые слова, которые летописец влагает и в уста Владимиру, шедшему против Ярополка, с тем только различием, что христианин Ярослав призывает бога в мстители неповинной крови и отдает свое дело на суд божий. Святополк, узнав, что Ярослав идет на него, собрал множество войска из Руси и печенегов и вышел к Любечу; он стал по ту сторону Днепра, а Ярослав - по эту. Ярослав, без сомнения, приплыл в лодках, а Святополк пришел из-за Десны с печенегами. В третий раз Днепр видел враждебное движение Северной Руси на Южную; оба первые раза при Олеге и Владимире сопротивления было мало со стороны юга, но теперь он собрал свои силы, и как север явился с естественными своими союзниками - варягами, так юг соединился с печенегами. Три месяца, а по другим известиям - только три недели, стояли враги по обеим сторонам Днепра; ни те, ни другие не смели перевезтись и напасть. Был в то время обычай поддразнивать врагов, чтоб побудить их начать дело к своей невыгоде. Видя, что главная сила Ярослава состояла из новгородцев горожан и сельчан, воевода Святополков ездя подле берега, бранил новгородцев, называл их ремесленниками, а не воинами. "Эй вы, плотники, - кричал он им, - зачем пришли сюда с хромым своим князем? Вот мы вас заставим рубить нам хоромы". Новгородцев сильно рассердила насмешка, и они сказали Ярославу: "Завтра перевеземся на них, а если кто не пойдет с нами, того сами убьем".
В лагере у Святополка Ярослав имел приятеля, к которому послал ночью спросить:
"Что делать? Меду мало варено, а дружины много"; тот отвечал, что пусть Ярослав к вечеру отдаст мед дружине; новгородский князь догадался, что ночью должно сделать нападение. Была заморозь; Святополк стоял между двумя озерами и всю ночь пил с дружиною, а Ярослав перед рассветом исполчил свое войско и перевезся на другой берег, причем новгородцы, высадившись из лодок, оттолкнули их от берега, чтоб отнять у себя всякую возможность к побегу; Ярослав приказал дружине повязать головы платками, чтоб в сече узнавать своих. Враги сошлись, была сеча злая; печенеги, стоявшие за озером, не могли помочь Святополку, который был притиснут с своею дружиною к озеру, принужден вступить на лед, лед обломился, и Ярослав одолел. Святополк бежал в Польшу, а Ярослав сел в Киеве на столе отцовском и дедовском, проживя на севере 28 лет. Новгородцы были отпущены домой и оделены щедро: старосты получили по 10 гривен, смерды - по гривне, а горожане все - по 10.