Римляне настигли армию Гасдрубала Баркида, когда та находилась у города Бекулы (ныне Байлен) в окрестностях Кастулона. Карфагенский лагерь охранялся конными разъездами, и передовые отряды римлян с ходу атаковали и едва не ворвались на их плечах в расположение противника. Узнав о подходе римлян, у которых был явный численный перевес, Гасдрубал не отважился на открытое сражение и перевел свою армию на более безопасную позицию. Для нее был выбран достаточно высокий и обрывистый холм с плоской вершиной, перед которым находились более низкие холмы, а с тыла карфагенян прикрывала река Гвадель, приток Гвадалквивира. На более низкой площадке Гасдрубал поставил нумидийцев, балеарских пращников и ливийцев (Полибий, Х, 38, 7–9; Ливий, XXVI, 18, 1–7).
Выбранная Гасдрубалом местность настолько благоприятствовала обороне, что Сципион в течение двух дней не решался ее атаковать. Долго выжидать он тоже не мог – в любой момент остальные пунийские полководцы могли уладить свои склоки и прийти на выручку Гасдрубалу. На третий день Сципион, поставив в окрестностях две когорты, чтобы перекрыть противнику пути к бегству, начал наступление. Несмотря на трудности подъема и град метательных снарядов, римские велиты упорно продвигались вперед и, достигнув первой площадки, заставили пунийских стрелков отступить к основным силам. Подтянув тяжелую пехоту, Сципион атаковал вражеский строй с трех сторон, при этом сам командовал левым флангом, а правый поручил Гаю Лелию. По словам Полибия, Гасдрубал не ожидал, что римляне продолжат наступление так скоро, если вообще на него решатся, поэтому к моменту рукопашной далеко не все пунийские воины оказались готовы к бою. Гасдрубал не успел еще должным образом организовать сопротивление по фронту, как его армия была атакована с флангов. Надеяться на благополучный исход битвы в таких условиях было невозможно, и Гасдрубал, забрав казну, вместе со слонами и частью армии вышел из боя и по долине Тага направился к Пиренеям, попутно подбирая беглецов (Полибий, Х, 38, 10; 39; Ливий, XXVI, 18, 8–20; 19, 1).
Несмотря на то что бой, по-видимому, длился не очень долго и значительную часть своих сил Гасдрубалу удалось увести, карфагеняне понесли довольно ощутимые потери. Убито было восемь тысяч, пленных оказалось десять тысяч пехотинцев и две тысячи всадников (Полибий, Х, 40, 1; Ливий, XXVI, 18, 20; 19, 2). Как и раньше, иберов отпустили без выкупа, а карфагенян продали в рабство. Тут же римское войско пополнилось новыми союзниками, и иберы вновь на переговорах называли Сципиона царем. Ситуация для него была довольно неудобная, ведь в республиканском Риме слово «царь» было равносильно слову «тиран», а любые претензии полководца на усиление собственной власти могли восприниматься как попытка мятежа. Помня об этом, Сципион через глашатаев объяснил, что желал бы только, чтобы его считали человеком с царственной душой, но не считали и не называли бы царем. Единственный титул, который он признавал для себя подходящим, был просто «военачальник». Такая скромность, естественно, еще больше укрепила его авторитет и среди римлян, и среди иберов (Полибий, Х, 40, 2–7; Ливий, XXVI, 19, 3–6).
Когда происходила продажа пленных, случилось событие, имевшее для римлян исключительно важные последствия. Из всей толпы ливийцев внимание квестора, ведающего торгами, привлек необычно красивый юноша. На вопрос, кто он, пленник ответил, что принадлежит к царскому роду. Квестор отправил его к Сципиону. Юноша назвался Массивой, племянником нумидийского царя Масиниссы. Сципион не мог упустить такого случая заставить вражеского командира почувствовать себя в долгу пред ним и, щедро одарив Массиву, отпустил его, дав сопровождающих до любого места, какое тот ни пожелает (Ливий, XXVI, 19, 8–12).
Перед Сципионом встал выбор: пытаться ли преследовать Гасдрубала, не давая ему прорваться в Италию, или заняться оставшимися пунийскими армиями в Испании, пока они не объединились и не свели на нет все, чего он достиг до этого. Недолго раздумывая, молодой проконсул выбрал второе. Таким образом, одержанная победа не дала римлянам практически никаких преимуществ: Гасдрубал мог теперь беспрепятственно идти в Италию, а понесенные им потери было легко возместить наборами добровольцев из местных племен. Пресечь прибытие подкреплений Ганнибалу на дальних подступах не удалось.