相持
袁軍初戰失利,但兵力、糧草、軍貨、財力仍然占據明顯的優勢。
后來,曹操回到官渡,沮授向袁紹說:“河北兵雖然人多勢眾但勇猛不如河南兵,河南的糧草、軍貨、財力都不如河北;河南利于速戰速決,河北利于緩慢戰斗。所以,我們營讓兩軍緩慢相持,拖長戰事。”沮授建議以持久緩進的戰術來消耗曹軍,但袁紹又不聽從。
七月,進軍陽武(今河南中牟北),準備南下進攻許都。八月,袁軍主力接近官渡,依沙堆立營,東西寬約數十里,曹操也立營與袁軍對峙,曹軍“合戰不利”。九月,曹軍再度出擊,與袁軍交戰不利,再次退回營壘,堅守。
袁紹構筑樓櫓,堆土如山,用箭俯射曹營。曹軍制作了一種拋石裝置叫作霹靂車,發石擊毀了袁軍所筑的樓櫓。袁軍又掘地道進攻,曹軍也在營內掘長塹相抵抗,粉碎了袁軍的計策。雙方相持三個月,曹操處境困難,前方兵少糧缺,士卒疲乏,后方也不穩固,曹操幾乎失去堅守的信心,一日見運糧士兵疲于奔命,于心不忍,不禁脫口而出,“卻十五日為汝破紹,不復勞汝矣!”曹操寫信給荀彧,商議要退守許都,荀彧回信說:“袁紹將主力集結于官渡,想要與公決勝負。公以至弱當至強,若不能制,必為所乘,這是決定天下大勢的關鍵所在。當年楚、漢在滎陽、成皋之間,劉邦、項羽沒有人肯先退一步,以為先退則勢屈。現在公以一當十,扼守要沖而使袁紹不能前進,已經半年了。情勢已然明朗,絕無回旋的余地,不久就會發生重大的轉變。這正是出奇制勝的時機,千萬不可坐失。”于是曹操決心繼續堅守待機,同時加強防守,命負責后勤補給的典農中郎將任峻采取十路縱隊為一部,縮短運輸隊的前后距離,并用復陣(兩列陣),加強護衛,防止袁軍襲擊;另一方面積極尋求和捕捉戰機,擊敗袁軍,不久派徐晃、史渙截擊、燒毀袁軍數千輛糧車,增加了袁軍的補給困難。
官渡之戰
期間,汝南郡黃巾軍劉辟叛變,袁紹使劉備前往相助,又派韓荀鈔斷曹軍西道,皆被曹仁擊破。江東孫策意欲偷襲許都,卻被刺客暗殺。
奇襲
十月,曹操在與袁紹相持日久,百姓疲乏,多叛應袁紹,曹軍缺乏糧食。袁紹又派車運糧,并令淳于瓊率兵萬人護送。沮授建議“另外派遣蔣奇率領支援軍隊行進在運糧軍隊的外表,以斷絕曹軍的抄掠”,但袁紹又不從。
淳于瓊率領著沒有外表援軍的運糧軍隊夜宿于烏巢(今河南延津東南),距離袁軍大營僅剩四十里的路程。恰在這時,袁紹謀士許攸投奔曹操,建議曹操輕兵奇襲烏巢,燒其輜重。曹操立即付諸實行,留曹洪、荀攸守營壘,親自率領步騎五千,冒用袁軍旗號,人銜枚馬縛口,各帶柴草一束,利用暗夜走小路偷襲烏巢。到達后立即圍攻放火。袁紹獲知曹操襲擊烏巢后,一方面派輕騎救援,另一方面命令寧國中郎將張郃、大將高覽率重兵猛攻曹軍大營。可曹營堅固,攻打不下。當曹軍急攻烏巢淳于瓊營時,袁紹增援的部隊已經迫近。曹操勵士死戰,大破袁軍,曹軍驍將樂進斬殺淳于瓊等,并將其糧草全數燒毀。張郃、高覽聞得烏巢被破,于是投降曹操,導致了軍心動搖,內部分裂,大軍崩潰。袁紹倉惶帶八百騎兵退回河北,曹軍先后殲滅和坑殺袁軍七萬余人,也有說是八萬人。
官渡之戰增強了曹操的實力,為曹操擊潰袁紹,統一北方奠定了堅實的基礎。北方僅有曹操和袁紹勢力較大,此戰擊潰了袁紹,北方就無人能和曹操抗衡。
官渡之戰后,曹軍活捉了沮授。沮授一直深得曹操賞識,起初曹操赦免沮授并且厚待他,但最后沮授因想要回到袁紹陣營而被曹操殺害。