Новгородцы сочли, что лучше сделать великим князем Ярослава, чем дожидаться, пока война придет в их земли. Новгород дал три тысячи воинов, варягов была тысяча. Но и с этими силами Ярослав три месяца прождал у Любеча, не решаясь переправиться через Днепр и напасть на войско Святополка, состоявшее из дружины отца, киевлян и печенегов. Наступила поздняя осень. Старый, еще от отца, воевода Святополка по имени Волчий Хвост, разбивший в 984 году радимичей на реке Пищане, вызывал людей Ярослава на бой: «Чего пришли с хромцом этим, вы же плотники? Мы и поставим вас нам хоромы рубить!» Врожденную хромоту князь усугубил в боях — исследование его останков показало, что у него была перерублена нога — а слова Волчьего Хвоста говорят, что хромота была сильна еще до его первой битвы на Руси. Услыхав эту хулу, «сказали новгородцы Ярославу: "Завтра мы переправимся и пойдем на них; если кто не пойдет с нами, сами убьем его"». Днепр начал замерзать. В то время климат был холоднее нынешнего. Война рисковала затянуться до появления крепкого льда.
Муж Святополка, с которым поддерживал связь Ярослав, советовал атаковать ночью, когда южная рать упьется хмельного меду. Вечером рать Ярослава высадилась на другом берегу и отпустила по течению ладьи, не намереваясь отступать. Ярослав приказал воинам повить головы платками, чтобы ночью отличать своих. Поскольку лагерь Святополка стоял между двумя озерами, его союзники печенеги не смогли участвовать в сече. В жестоком сражении грудь в грудь Святополк к утру был разбит. Он бежал к тестю в Польшу, а Ярослав пришел в Киев и занял великокняжеский престол. Было ему тогда 37 лет.
Победитель мог распустить полки, щедро наградив новгородцев. Служившим в его войске крестьянам-смердам князь дал по гривне, сельским старостам и городским мужам — по десять гривен серебра. Это бесценное свидетельство Древнейшего сказания сохранилось только в новгородской летописи, но не попало в киевские. Оно говорит нам о социальном составе войска, которое пошло за Ярославом, несмотря на убийство им новгородских мужей, и само побуждало князя дать битву. Целью новгородцев было освобождение от тяжкой дани Киеву. И они этого добились. В ознаменование заслуг Новгорода Ярослав пожаловал ему льготную грамоту на налоги, собиравшиеся в киевскую казну. Кроме того, в своем судебном уставе князь решительно поставил новгородцев и вообще русских вдвое выше заморских гостей. Что получили наемные варяги? По летописи — ничего. Киевская дружина, оставшаяся от Владимира, и градские мужи, обогатившиеся подарками Святополка, своего щедрого князя от бегства не удержали. Усобица, как видим, внешне мотивировалась схваткой за власть князей, но внутренне была поддержана и решена стремлением горожан и крестьян севера покончить с поборами и диктатом Киева. При этом ограниченны были права киевского князя, а сам город и поляне не пострадали.
Столь патриотичная позиция Ярослава была предусмотрительным ответом на вызов со стороны Святополка, который вынужден был опираться на иноземцев. Беглец нашел приют у тестя, польского князя Болеслава Храброго, и снова искал помощи у печенегов. В противовес Болеславу, Ярослав заключил союз с германским императором Генрихом II. Но немцы были так побиты поляками, что император просил о мире и сам посоветовал Болеславу обратить силы на восток. Использовать в своих целях «права» Святополка хотели и печенеги. В 1017 году они напали на Киев. Ярослав едва одолел их в сече под стенами города. На следующий год на Русь двинулось войско поляков, печенегов, немцев и венгров под командой Болеслава и Святополка. Ярослав, собрав русь, варягов и новгородских словен, поспешил на Волынь и встретил врага у переправы через пограничную реку Буг. Болеслав был так велик и тяжел, что едва сидел на коне, но русские напрасно дразнили его толстяком. Знаменитый воин, не стерпев насмешек, бросился на коне в реку, крикнув своим воинам: «Коли вам сего укора не жаль, я погибну один!» Не ожидавшее стремительного нападения войско Ярослава было уничтожено.