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