Here's how you should lay out your sample data: -
CREATE TABLE Customer (CustomerID INT, CustomerName VARCHAR(200), Birthdate DATETIME);
INSERT INTO Customer
SELECT CustomerID,CustomerName,Birthdate
FROM (VALUES(1,'John Doe','1/1/1970 08:31 AM'),(2,'Jane Doe','1/1/1971 01:18 PM'),
(3,'Jon Public','1/1/1972 11:58 PM'),(4,'Jane Public','1/1/1973 07:00 AM'),
(5,'John Smith','1/1/1974 08:31 AM'))a(CustomerID,CustomerName,Birthdate);
CREATE TABLE [Order] (OrderID INT, [PO Number] VARCHAR(10), OrderDate DATETIME);
INSERT INTO [Order]
SELECT OrderID, [PO Number], OrderDate
FROM (VALUES(1000,'ABC123','1/1/2012 01:00 PM'),(2000,'112233','2/1/2012 02:00 AM'),
(3000,'XYZ987','3/1/2012 03:00 PM'),(4000,'50000','4/1/2012 04:00 AM'),
(5000,'Verbal','5/1/2012 05:00 AM'))a(OrderID, [PO Number], OrderDate);
CREATE TABLE CustomerOrders (CustomerID INT, OrderID INT, IsShipped VARCHAR(5));
INSERT INTO CustomerOrders
SELECT CustomerID, OrderID, IsShipped
FROM (VALUES(1,1000,'False'),(1,3000,'True'),(3,4000,'False'),(2,2000,'True'),
(5,5000,'True'))a(CustomerID, OrderID, IsShipped);
That makes it so that anyone can just execute the script and have a mock-up of your data. You should include any indexes as well if you want the best performing solution.
Jeff's method is fine, but to show another method you could also do this: -
SELECT *
FROM Customer cus
WHERE NOT EXISTS (SELECT 1
FROM CustomerOrders ord
WHERE cus.CustomerID = ord.CustomerID);
They probably perform the same, but it's worth testing both methods on your actual data.