diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 0.1.1.0
+
+- Added functions `nullifyKeysIn` and `nullifyKeysNotIn` to `MonoidMap`.
+
 # 0.1.0.4
 
 - Updated links to source repository in package metadata.
diff --git a/components/monoidmap-internal/Data/MonoidMap/Internal.hs b/components/monoidmap-internal/Data/MonoidMap/Internal.hs
--- a/components/monoidmap-internal/Data/MonoidMap/Internal.hs
+++ b/components/monoidmap-internal/Data/MonoidMap/Internal.hs
@@ -38,7 +38,11 @@
     -- ** Modification
     , set
     , adjust
+
+    -- ** Nullification
     , nullify
+    , nullifyKeysIn
+    , nullifyKeysNotIn
 
     -- ** Membership
     , null
@@ -657,16 +661,69 @@
 adjust f k (MonoidMap m) = MonoidMap $
     Map.alter (maybeNonNull . maybe (f mempty) (applyNonNull f)) k m
 
+--------------------------------------------------------------------------------
+-- Nullification
+--------------------------------------------------------------------------------
+
 -- | \(O(\log n)\). Sets the value associated with the given key to 'mempty'.
 --
 -- Satisfies the following property:
 --
 -- @
--- 'get' k ('nullify' k m) '==' 'mempty'
+-- 'get' k1 ('nullify' k2 m) '=='
+--     if k1 '==' k2
+--     then 'mempty'
+--     else 'get' k1 m
 -- @
 --
 nullify :: Ord k => k -> MonoidMap k v -> MonoidMap k v
 nullify k (MonoidMap m) = MonoidMap $ Map.delete k m
+
+-- | \(O\bigl(m \log\bigl(\frac{n}{m}+1\bigr)\bigr), \; 0 < m \leq n\).
+--
+-- Sets the values associated with all keys in the given set to 'mempty'.
+--
+-- Satisfies the following properties:
+--
+-- @
+-- 'get' k ('nullifyKeysIn' ks m) '=='
+--     if 'Set'.'Set.member' k ks
+--     then 'mempty'
+--     else 'get' k m
+-- @
+--
+-- @
+-- 'nullifyKeysIn' ks m '=='
+--     'fromMap' ('Map'.'Map.withoutKeys' ('toMap' m) ks)
+-- @
+--
+-- @since 0.0.6.0
+--
+nullifyKeysIn :: Ord k => Set k -> MonoidMap k v -> MonoidMap k v
+nullifyKeysIn ks (MonoidMap m) = MonoidMap $ m `Map.withoutKeys` ks
+
+-- | \(O\bigl(m \log\bigl(\frac{n}{m}+1\bigr)\bigr), \; 0 < m \leq n\).
+--
+-- Sets the values associated with all keys not in the given set to 'mempty'.
+--
+-- Satisfies the following properties:
+--
+-- @
+-- 'get' k ('nullifyKeysNotIn' ks m) '=='
+--     if 'Set'.'Set.notMember' k ks
+--     then 'mempty'
+--     else 'get' k m
+-- @
+--
+-- @
+-- 'nullifyKeysNotIn' ks m '=='
+--     'fromMap' ('Map'.'Map.restrictKeys' ('toMap' m) ks)
+-- @
+--
+-- @since 0.0.6.0
+--
+nullifyKeysNotIn :: Ord k => Set k -> MonoidMap k v -> MonoidMap k v
+nullifyKeysNotIn ks (MonoidMap m) = MonoidMap $ m `Map.restrictKeys` ks
 
 --------------------------------------------------------------------------------
 -- Membership
diff --git a/components/monoidmap-test/Data/MonoidMap/Internal/MembershipSpec.hs b/components/monoidmap-test/Data/MonoidMap/Internal/MembershipSpec.hs
--- a/components/monoidmap-test/Data/MonoidMap/Internal/MembershipSpec.hs
+++ b/components/monoidmap-test/Data/MonoidMap/Internal/MembershipSpec.hs
@@ -20,6 +20,10 @@
     ( MonoidMap )
 import Data.Proxy
     ( Proxy (..) )
+import Data.Set
+    ( Set )
+import Test.Combinators.OftenEqual
+    ( OftenEqual (OftenEqual) )
 import Test.Common
     ( Key
     , Test
@@ -45,6 +49,9 @@
 specFor :: forall k v. Test k v => Proxy k -> Proxy v -> Spec
 specFor = makeSpec $ do
 
+    it "prop_nonNullKeys_get" $
+        prop_nonNullKeys_get
+            @k @v & property
     it "prop_nullify_get" $
         prop_nullify_get
             @k @v & property
@@ -54,20 +61,47 @@
     it "prop_nullify_nonNullKeys" $
         prop_nullify_nonNullKeys
             @k @v & property
-    it "prop_nonNullKeys_get" $
-        prop_nonNullKeys_get
+    it "prop_nullifyKeysIn_get" $
+        prop_nullifyKeysIn_get
             @k @v & property
+    it "prop_nullifyKeysNotIn_get" $
+        prop_nullifyKeysNotIn_get
+            @k @v & property
 
+prop_nonNullKeys_get
+    :: Test k v => MonoidMap k v -> Property
+prop_nonNullKeys_get m =
+    fmap
+        (\k -> (k, MonoidMap.get k m))
+        (Set.toList (MonoidMap.nonNullKeys m))
+        === MonoidMap.toList m
+    & cover 2
+        (MonoidMap.null m)
+        "MonoidMap.null m"
+    & cover 2
+        (not (MonoidMap.null m))
+        "not (MonoidMap.null m)"
+
 prop_nullify_get
-    :: Test k v => MonoidMap k v -> k -> Property
-prop_nullify_get m k =
-    MonoidMap.get k (MonoidMap.nullify k m) === mempty
+    :: Test k v => MonoidMap k v -> OftenEqual k -> Property
+prop_nullify_get m (OftenEqual k1 k2) =
+    MonoidMap.get k1 (MonoidMap.nullify k2 m) ===
+        (if k1 == k2 then mempty else MonoidMap.get k1 m)
     & cover 2
-        (MonoidMap.nonNullKey k m)
-        "MonoidMap.nonNullKey k m"
+        (k1 == k2 && MonoidMap.nonNullKey k1 m)
+        "k1 == k2 && MonoidMap.nonNullKey k1 m"
     & cover 2
-        (not (MonoidMap.nonNullKey k m))
-        "not (MonoidMap.nonNullKey k m)"
+        (k1 == k2 && MonoidMap.nullKey k1 m)
+        "k1 == k2 && MonoidMap.nullKey k1 m"
+    & cover 2
+        (k1 /= k2 && MonoidMap.nonNullKey k1 m)
+        "k1 /= k2 && MonoidMap.nonNullKey k1 m"
+    & cover 2
+        (k1 /= k2 && MonoidMap.nullKey k1 m)
+        "k1 /= k2 && MonoidMap.nullKey k1 m"
+    & cover 2
+        (k1 /= k2 && MonoidMap.nonNullKey k1 m && MonoidMap.nonNullKey k2 m)
+        "k1 /= k2 && MonoidMap.nonNullKey k1 m && MonoidMap.nonNullKey k2 m"
 
 prop_nullify_nonNullKey
     :: Test k v => MonoidMap k v -> k -> Property
@@ -91,16 +125,38 @@
         (not (MonoidMap.nonNullKey k m))
         "not (MonoidMap.nonNullKey k m)"
 
-prop_nonNullKeys_get
-    :: Test k v => MonoidMap k v -> Property
-prop_nonNullKeys_get m =
-    fmap
-        (\k -> (k, MonoidMap.get k m))
-        (Set.toList (MonoidMap.nonNullKeys m))
-        === MonoidMap.toList m
+prop_nullifyKeysIn_get
+    :: Test k v => MonoidMap k v -> Set k -> k -> Property
+prop_nullifyKeysIn_get m ks k =
+    MonoidMap.get k (MonoidMap.nullifyKeysIn ks m) ===
+        (if Set.member k ks then mempty else MonoidMap.get k m)
     & cover 2
-        (MonoidMap.null m)
-        "MonoidMap.null m"
+        (Set.member k ks && MonoidMap.nullKey k m)
+        "Set.member k ks && MonoidMap.nullKey k m"
     & cover 2
-        (not (MonoidMap.null m))
-        "not (MonoidMap.null m)"
+        (Set.member k ks && MonoidMap.nonNullKey k m)
+        "Set.member k ks && MonoidMap.nonNullKey k m"
+    & cover 2
+        (Set.notMember k ks && MonoidMap.nullKey k m)
+        "Set.notMember k ks && MonoidMap.nullKey k m"
+    & cover 2
+        (Set.notMember k ks && MonoidMap.nonNullKey k m)
+        "Set.notMember k ks && MonoidMap.nonNullKey k m"
+
+prop_nullifyKeysNotIn_get
+    :: Test k v => MonoidMap k v -> Set k -> k -> Property
+prop_nullifyKeysNotIn_get m ks k =
+    MonoidMap.get k (MonoidMap.nullifyKeysNotIn ks m) ===
+        (if Set.notMember k ks then mempty else MonoidMap.get k m)
+    & cover 2
+        (Set.member k ks && MonoidMap.nullKey k m)
+        "Set.member k ks && MonoidMap.nullKey k m"
+    & cover 2
+        (Set.member k ks && MonoidMap.nonNullKey k m)
+        "Set.member k ks && MonoidMap.nonNullKey k m"
+    & cover 2
+        (Set.notMember k ks && MonoidMap.nullKey k m)
+        "Set.notMember k ks && MonoidMap.nullKey k m"
+    & cover 2
+        (Set.notMember k ks && MonoidMap.nonNullKey k m)
+        "Set.notMember k ks && MonoidMap.nonNullKey k m"
diff --git a/components/monoidmap-test/Test/Combinators/OftenEqual.hs b/components/monoidmap-test/Test/Combinators/OftenEqual.hs
new file mode 100644
--- /dev/null
+++ b/components/monoidmap-test/Test/Combinators/OftenEqual.hs
@@ -0,0 +1,38 @@
+-- |
+-- Copyright: © 2022–2026 Jonathan Knowles
+-- License: Apache-2.0
+--
+module Test.Combinators.OftenEqual
+    ( OftenEqual (OftenEqual)
+    , genOftenEqual
+    , shrinkOftenEqual
+    )
+    where
+
+import Prelude
+
+import Test.QuickCheck
+    ( Arbitrary (arbitrary, shrink)
+    , Arbitrary2 (liftShrink2)
+    , Gen
+    , oneof
+    )
+
+-- | A pair of values that are equal at least half of the time.
+data OftenEqual a = OftenEqual !a !a
+    deriving (Eq, Show)
+
+genOftenEqual :: Gen a -> Gen (OftenEqual a)
+genOftenEqual genA = do
+    a1 <- genA
+    a2 <- oneof [pure a1, genA]
+    pure $ OftenEqual a1 a2
+
+shrinkOftenEqual :: Eq a => (a -> [a]) -> OftenEqual a -> [OftenEqual a]
+shrinkOftenEqual shrinkA (OftenEqual a1 a2)
+    | a1 == a2  = [OftenEqual a a | a <- shrinkA a1]
+    | otherwise = uncurry OftenEqual <$> liftShrink2 shrinkA shrinkA (a1, a2)
+
+instance (Arbitrary a, Eq a) => Arbitrary (OftenEqual a) where
+    arbitrary = genOftenEqual arbitrary
+    shrink = shrinkOftenEqual shrink
diff --git a/monoidmap-internal.cabal b/monoidmap-internal.cabal
--- a/monoidmap-internal.cabal
+++ b/monoidmap-internal.cabal
@@ -1,6 +1,6 @@
 cabal-version:  3.0
 name:           monoidmap-internal
-version:        0.1.0.4
+version:        0.1.1.0
 homepage:       https://github.com/jonathanknowles/monoidmap/tree/HEAD/packages/monoidmap-internal
 bug-reports:    https://github.com/jonathanknowles/monoidmap/issues
 license:        Apache-2.0
@@ -160,6 +160,7 @@
         Data.MonoidMap.Internal.UnionSpec
         Data.MonoidMap.Internal.ValiditySpec
         Test.Combinators.NonZero
+        Test.Combinators.OftenEqual
         Test.Common
         Test.Hspec.Unit
         Test.Key
