公元202年(建安七年),袁绍病死,袁绍的两个儿子袁谭、袁尚不和,发生火拼。袁谭不敌袁尚,向曹操乞降。公元204年(建安九年)二月,曹操乘袁尚出兵攻打袁谭之机,进军围攻邺城(今河北临漳西,河南安阳北)。袁尚率军回救,依滏水(今滏阳河)为营,曹操进军将其营寨包围。袁尚害怕,请求投降,曹操不许。袁尚乘夜逃跑,袁军溃散。袁尚逃奔中山(今河北定县)。曹操命人拿着缴获袁尚的印绶节钺招降邺城守军,城中斗志崩溃。邺城遂被曹操攻破。从这一年起,曹操把自己的据点北迁到了冀州邺城,政令军队此后皆从此出,而汉献帝的都城许县则只留些许官吏。公元205年(建安十年)正月,曹操又以负约为名,攻灭袁谭,冀、青二州平定。于是,曹操上表让还兖州牧,改任冀州牧。袁尚兵败后,逃奔幽州刺史袁熙。不久,袁尚、袁熙又逃奔三郡乌桓。公元206年(建安十一年),曹操攻灭高干,平定并州。公元207年(建安十二年),曹操为了肃清袁氏残余势力,也为了彻底解决三郡乌桓入塞为害问题,决定远征乌桓。汉末,辽西、辽东、右北平三郡乌桓结合,是为三郡乌桓,其首领为辽西部的蹋顿。三郡乌桓与袁氏关系一直很好,并屡次侵扰边境,掳掠人口财物。这年五月,曹操亲率大军到达无终(今蓟县)。时正雨季,道路积水,“浅不通车马,深不载舟船”。曹操从无终人田畴之议,改从一条久已断绝,但“尚有微径可寻”的路线进军。在田畴的引导下,曹操大军登徐无山(今河北玉田北),出卢龙塞(今河北喜峰口附近),“堑山堙谷五百余里”,直指乌桓老巢柳城(今辽宁朝阳南)。八月,曹军进至离柳城不足二百里时,乌桓才发现,于是蹋顿与袁尚、袁熙等人率数万骑兵迎击。二军相遇,时曹军辎重在后,“被甲者少,”而乌桓军军势甚盛。曹操登高瞭望,见乌桓军虽多,但阵势不整,遂命大将张辽为前锋,乘乌桓军阵稍动之机,向乌桓军发动猛攻。乌桓军大乱,曹军阵斩蹋顿,大获全胜,胡、汉降者二十余万,袁尚等人逃奔割据平州的公孙康。这时,有人劝曹操乘势进击公孙康,曹操却撤军。不久,公孙康果然斩杀袁尚、袁熙,并将其首级献与曹操。诸将不明所以,曹操说:“彼素畏尚等,吾急之则并力,缓之则自相图,其势然也。”于是,曹操攻破三郡乌桓,也彻底肃清了袁氏势力。但是于十一月回易水的途中,曹操第一谋士郭嘉去世,对曹操给予沉重打击,郭嘉对于曹操而言,其助他先后灭吕布、袁术、袁绍都起到了重要作用,也是他建议既不杀刘备也不放刘备的计策“软禁”让曹操在外的威信有所提高。
曹操讨伐乌桓,孔融讥笑他说:“大将军远征,萧条海外,从前肃慎不进贡木苦矢,丁零偷盗苏武的牛羊,可以一并讨伐啊!”当时,饥荒战乱,曹操上表请禁酒,孔融多次写信给曹操,认为不要禁酒,而且言词之中多有侮慢。曹操越来越厌恶他了。孔融已经看到曹操奸雄诡诈,已渐渐显露,愈发不能忍受,所以说话偏激,常常触犯了曹操。又曾经上奏认为应当遵照古时京师的体制,千里以内,不得封建诸侯。曹操怀疑他所谈论的越来越广,更加害怕他。然而,因为孔融名重天下,表面上装着容忍,暗中却嫉忌他正确的议论,怕阻抗自己的大业。山阳人郗虑揣摩曹操的心事,以蔑视国法为由奏免孔融。曹操又写信故意挑拨二人,孔融也回信相对。
对于刘备,曹操在取得仓亭、官渡的胜利后,已经意识到关羽已经与刘备、张飞等人回合投靠刘表,刘氏宗亲的联盟让曹操感到威胁,于是趁刘备在荆州未立稳之际,抓进铲除他,于是他接受程昱的建议,派夏侯惇、李典、于禁三人率军三千对刘备进行致命一击。
此时,刘备已经领刘表之命于公元202年(建安七年)带军北上。

