You're making it more complicated than it has to be. :-) This is the key to your answer:
Else, it returns nothing: ?
Exactly. This is the result of browser function: they will only submit checkbox values if they are checked.
This makes security in respect to this field irrelevant. All you're doing is checking if it's set, you're not actually inserting the form input in your database, giving you one less field to validate.
(Extension of Selena Sol's "Use only what you want and throw everything else away.") So all you need to do is
// Or $_POST as mentioned, this would be better as it
// doesn't result in "ugly query strings" in the address bar
$preggers = (isset($_GET["pregnant"]))?'Yes':'No';
Or, if you're (wisely) using a boolean or tinyint field for this purpose,
$preggers = (isset($_GET["pregnant"]))?1:0;
insert into table (pregnant) values($preggers);
Let's add to that last one: if you use a numeric representation for this field, declare this global array somewhere. You can use it for any yes/no display.
$YesNos = Array('No','Yes');
$query = "select pregnant from table";
$result = mysql_query($query) or die("cannot query table");
while ($row = mysql_fetch_array($result)) {
echo "<p>" . $YesNos[$row['pregnant']] . "</p>";
}